Java 基于UDP 多客户端通信
程序员文章站
2024-03-23 09:57:46
...
一、前言
今天是1024,先祝大家少脱发,多挣钱。
二、UDP
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
三、实现
用到的主要包装类
DatagramPacket//数据报
DatagramSocket//套接字
UDPCilent.java 客户端实现
import javax.xml.crypto.Data;
import java.io.IOException;
import java.net.*;
public class UDPCilent {
public static void main(String[] args) throws IOException {
//根据localhost获取IP地址
InetAddress inetAddress = InetAddress.getByName("localhost");
//指定端口
int port = 8800;
//准备信息
byte[] bytes="用户名WYH123,密码123".getBytes();
//将信息放到数据报中
DatagramPacket packet=new DatagramPacket(bytes,bytes.length,inetAddress,port);
//使用套接字发送数据报
DatagramSocket socket =new DatagramSocket();
socket.send(packet);
System.out.println("已向服务器端发送数据,等待服务器的响应");
//创建第二个数据包,用于保存响应
byte[] bytes1=new byte[1024];
DatagramPacket packet1=new DatagramPacket(bytes1,bytes1.length);
socket.receive(packet1);
System.out.println("接收到的服务器响应为:"+new String(bytes1,0,bytes1.length));
}
}
UDPServer.java 服务端实现
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
基于UDP的服务器端
*/
public class UDPServer {
public static void main(String[] args) throws IOException {
DatagramSocket socket=new DatagramSocket(8800);
System.out.println("***服务器端已经启动***");
byte[] data = new byte[1024];
DatagramPacket packet=new DatagramPacket(data,data.length);
//不断地去接受数据报
while(true)
{
socket.receive(packet);
System.out.println("服务器接收到的信息为:"+new String(data,0,data.length));
ServerThread serverThread=new ServerThread(packet);
serverThread.run();
}
}
}
ServerThread.java
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ServerThread extends Thread {
DatagramPacket packet=null;
public ServerThread(DatagramPacket packet)
{
this.packet=packet;
}
@Override
public void run() {
try {
//向客户端响应
InetAddress inetAddress=packet.getAddress();//获取刚才客户端的地址
int port =packet.getPort();
//准备数据
byte[] data2="欢迎您".getBytes();
//创建数据报
DatagramPacket packet1=new DatagramPacket(data2,data2.length,inetAddress,port);
DatagramSocket datagramSocket=new DatagramSocket();
datagramSocket.send(packet1);
datagramSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上一篇: 12-初始化