TCP/UDP
TCP:基于连接的点对点安全传输协议,有连接,传输可靠,适用于大量数据传输,但是效率相对较慢。
UDP:基于广播形式一对多非安全传输协议,面向无连接,效率相对较快,但是只是适用于少量数据传输。
TCP
使用Socket,ServerSocket来实现连接,服务端设置端口号,客户端需和服务端端口号一致。
服务端核心代码:
//1 创建一个ServerSocket对象 ,设置 这个应用程序的端口
ServerSocket server = new ServerSocket(8889);
// 2 监听客户端发送的socket对象 (只要有人请求服务器,则返回一个 Socket对象 ,此对象就是客户端发送的对象)
Socket socket = server.accept();
//3从客户端接收的数据 在 输入流中
InputStream is = socket.getInputStream();
byte [] b = new byte[100];
int len = is.read(b);
System.out.println("接收的内容:"+new String(b,0,len));
客户端核心代码:
//先 发送数据 1 需要创建一个 连接对方的套接字 Socket
Socket socket = new Socket("127.0.0.1", 8889); // 只要该语句没有异常 说明两端的管道已经建立
// 2、发送数据
System.out.println("请输入您要发送的数据:");
String msg = "你好";
OutputStream os = socket.getOutputStream();
os.write(msg.getBytes()); // 每写出一次,数据在服务端接收一次
实现多次聊天的话可以对监听出代码加一个循环,使其一致处于监听状态。
UDP
UDP协议更像是快递站的模式,一边建立一个快递站,发送方(客户端)发送数据,给数据加上内容,大小(字节长度),联系方式(地址)端口号(接收方),接收方接到后,先创建一个固定大小的盒子(创建数据包对象,指定接收数据的 初始长度 (实际数据大小以接收的为准 )),然后开始拆快递(获取接收的数据 并转成字符串 )。
服务端核心代码:
// 1 创建 服务端 接收数据的 Socket对象 两边的端口号 一致
DatagramSocket serverSocket = new DatagramSocket(8888);
// 2 创建数据包对象,指定接收数据的 初始长度 (实际数据大小以接收的为准 )
byte [] b = new byte[1024];
DatagramPacket p = new DatagramPacket(b, b.length);
//3 接收数据 ,也需要一个 DatagramPacket
serverSocket.receive(p);
//4 ,获取接收的数据 并转成字符串 默认情况下 getDate返回 初始长度的所有内容
String msg = new String( p.getData(),0,p.getLength());
客户端核心代码:
// 1、 创建一个用于发送数据报的对象 (相当于 快递员)
DatagramSocket socket = new DatagramSocket();
// 2 创建一个 DatagramPacket ,用于封装数据 和 指定 发送地址 端口
String msg="hello 你好";
// 参数1 : 内容, 参数 2 字节的长度 参数3 地址 参数4 端口
DatagramPacket packet = new DatagramPacket(msg.getBytes(), msg.getBytes().length,
InetAddress.getByName("127.0.0.1"), 8888);
//发送
socket.send(packet);
UDP实现服务端客户端聊天也可以,因为客户端在发送数据的同时也将自己的IP地址发送过去了,服务端只需要从客户端接收数据提出IP地址,在给客户端设置一个默认的端口号两边就能实现多次聊天。