Java中的Scoket编程
网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。
java.net包中提供了两种常见的网络协议的支持:
- TCP: TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称TCP / IP。
- UDP:UDP是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。
在这里我们主要讲解socket编程(使用最为广泛的网络编程),举个简单的例子,就像是我们平常用的QQ,每个人用的都是一个Client(客户端),而服务端则是腾讯的服务器,我们彼此之间的通信是通过先将消息发送到服务端,然后服务端转发到目标客户端(你想要发送给的对象),而不是每个客户端直接通信。
由此我们可以得出socket通信的基本流程:
首先是客户端:通过IP地址和port(端口号)与服务端建立连接->进行信息传递—>关闭连接,然后是服务端:对客户端进行监听—>建立连接—>信息传递—>关闭连接。
下面是一个简单的实现客户端和服务端通信的例子:
服务端:
package com.internet.server; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class TestServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
OutputStream out = null;
InputStream in = null;
int port = 12125; try {
serverSocket = new ServerSocket(port);
System.out.println("服务端开始监听!!!");
socket = serverSocket.accept();
in = socket.getInputStream();
byte[] b = new byte[1024];
out = socket.getOutputStream();
for (int i = 0; i < 3; i++) {
int n = in.read(b);
System.out.println("接收到的信息为:" + new String(b, 0, n));
out.write(b, 0, n);
} } catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
in.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
}
客户端:
package lib; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket; public class TestClient {
public static void main(String[] args) throws InterruptedException,
IOException {
Socket socket = null;
InputStream in = null;
OutputStream out = null;
// 定义端口
int port = 12125;
// 服务端的IP地址
String serverIP = "127.0.0.1";
// 传递的数据
String data[] = { "First", "Second", "Third" };
try {
socket = new Socket(serverIP, port);
out = socket.getOutputStream();
in = socket.getInputStream();
byte[] b = new byte[1024];
for (int i = 0; i < data.length; i++) {
out.write(data[i].getBytes());
int n = in.read(b);
System.out.println("传递的数据为:" + new String(b, 0, n));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
in.close();
out.close();
socket.close();
}
}
}
服务端和客户端之间是通过我们之前提到的“流“(字节流)的方式进行信息传递的。在上述代码中我们需要保证客户端和服务端的端口号是一致的,同时客户端中的IP地址我们可以填写本机地址,即127.0.0.1也可以填写外网IP。只需要一个服务端即可,然后在多个客户端之间实现通信,当然这只是简单的信息传递,如果想要编写出类似于QQ的简单的小程序还需要swing,多线程等知识,感兴趣的小伙伴可以自行尝试。
Java中的Scoket编程的更多相关文章
- Java中的网络编程
Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...
- 读懂Java中的Socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- 读懂Java中的Socket编程(转)
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- Java 中的函数式编程(Functional Programming):Lambda 初识
Java 8 发布带来的一个主要特性就是对函数式编程的支持. 而 Lambda 表达式就是一个新的并且很重要的一个概念. 它提供了一个简单并且很简洁的编码方式. 首先从几个简单的 Lambda 表达式 ...
- 第84节:Java中的网络编程(中)
第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...
- 第78节:Java中的网络编程(上)
第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...
- 第62节:探索Java中的网络编程技术
前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...
- Java中的 多线程编程
Java 中的多线程编程 一.多线程的优缺点 多线程的优点: 1)资源利用率更好2)程序设计在某些情况下更简单3)程序响应更快 多线程的代价: 1)设计更复杂虽然有一些多线程应用程序比单线程的应用程序 ...
- java中的socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
随机推荐
- 团 大连网赛 1007 Friends and Enemies
//大连网赛 1007 Friends and Enemies // 思路:思路很棒! // 转化成最大二分图 // 团:点集的子集是个完全图 // 那么朋友圈可以考虑成一个团,原题就转化成用团去覆盖 ...
- jQuery/CSS3大屏下拉菜单 自定义子菜单内容
这是一款样式很酷的jQuery/CSS3下拉菜单,首先这款CSS3菜单是宽屏的,主要是下拉菜单非常大气,更重要的是,下拉菜单的内容可以自己定义,也就是说,下拉菜单中可以定义菜单.图片等HTML元素,是 ...
- spring-boot系列:初试spring-boot
部署父工程 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...
- Codeforces Round #372 (Div. 1) B. Complete The Graph (枚举+最短路)
题目就是给你一个图,图中部分边没有赋权值,要求你把无权的边赋值,使得s->t的最短路为l. 卡了几周的题了,最后还是经群主大大指点……做出来的…… 思路就是跑最短路,然后改权值为最短路和L的差值 ...
- C# 索引器 学习
转载原地址: http://www.cnblogs.com/lxblog/p/3940261.html 1.索引器(Indexer): 索引器允许类或者结构的实例按照与数组相同的方式进行索引.索引器类 ...
- HTML5实现动画三种方式
编者注:作者以一个运动的小车为例子,讲述了三种实现HTML5动画的方式,思路清晰,动画不仅仅是canvas,还有css3和javascript.通过合理的选择,来实现最优的实现. PS:由于显卡.录制 ...
- [置顶] 《Windows编程零基础》__2 一个完整的程序
Windows开发的常识 1)窗口 Windows中最基本的概念也许就是窗口了,每一个前台程序都至少有一个窗口,一个窗口也是你可以看到的部分,比如,QQ有如下的登录窗口 基本上你在Windows中可见 ...
- 通过克隆MAC地址 破解网通电信封路由
通过克隆MAC地址 破解网通电信封路由 电信封路由方法一:先确定申请上网的电脑单机状态下已经能够上网.就说明该电脑网卡的MAC地址是合法的MAC地址.进入系统的MSDOS方式,发布ipconfig/a ...
- C# 启动外部程序的几种方法
. 启动外部程序,不等待其退出. . 启动外部程序,等待其退出. . 启动外部程序,无限等待其退出. . 启动外部程序,通过事件监视其退出. // using System.Diagnostics; ...
- Android中Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...