UDP通信、聊天示例(接收端、发送端)

 

 

1、发送Send

  • 创建DatagramSocket, 随机端口号
  • 创建DatagramPacket, 指定数据, 长度, 地址, 端口
  • 使用DatagramSocket发送DatagramPacket
  • 关闭DatagramSocket

2、接收端Receive

  • 创建DatagramSocket, 指定端口号
  • 创建DatagramPacket, 指定数组, 长度
  • 使用DatagramSocket接收DatagramPacket
  • 关闭DatagramSocket
  • 从DatagramPacket中获取数据

3、接收方获取ip和端口号

  • String ip = packet.getAddress().getHostAddress();
  • int port = packet.getPort();

4、发送端代码实现:

public static void main(String[] args) throws Exception {
	//确定要发送的内容
	String str = "你愿意跟我一起去吃麻辣烫吗?";
	//创建发送端Socket 可以ip ,会提供一个随机的
	DatagramSocket socket = new DatagramSocket();
	//创建装载数据的包  要指明IP地址,端口号, 
	DatagramPacket packet = new DatagramPacket(str.getBytes(), str.getBytes().length, 
			InetAddress.getByName("127.0.0.1"), 6666);
	//发送数据
	socket.send(packet);
	//关闭socket
	socket.close();
}

5、接收端代码实现:

public static void main(String[] args) throws Exception {
	//创建接收端Socket,必须指定端口,不然接收不到
	DatagramSocket socket = new DatagramSocket(6666);
	//创建装载数据的包
	DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
	//接收数据, 阻塞方法
	socket.receive(packet);
	//获取接收到的数据
	byte[] bs = packet.getData();
	//获取接收到的有效数据的长度
	int len = packet.getLength();
	System.out.println(new String(bs,0,len));
	//获取对方法的端口号
	System.out.println(packet.getPort());
	//获取对方的ip地址
	System.out.println(packet.getAddress());
	//关闭socket
	socket.close();
}

6、UDP传输优化(可发送多条数据)

public static void main(String[] args) throws Exception {
	//从键盘录入数据
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	
	//创建发送端Socket 可以ip ,会提供一个随机的
	DatagramSocket socket = new DatagramSocket();
	//循环接收数据
	while(true){
		String str = br.readLine();
		//创建装载数据的包  要指明IP地址,端口号, 
		DatagramPacket packet = new DatagramPacket(str.getBytes(), str.getBytes().length, 
				InetAddress.getByName("127.0.0.1"), 6666);
		
		//发送数据
		socket.send(packet);
		if("结束".equals(str)){
			break;
		}
	}

	//关闭socket
	socket.close();
}

7、双人聊天示例

1、客户端一

public class ChatOne {
	public static void main(String[] args) throws Exception{
                //创建基站
		DatagramSocket one = new DatagramSocket(11223);
                //从键盘录入数据
		Scanner sc = new Scanner(System.in);
                //建立数据包
		DatagramPacket packet = new DatagramPacket(new byte[1024], 1024, InetAddress.getByName("127.0.0.1"), 9999);
                //循环输入聊天语句
		while(true) {
			String str = sc.next();
			packet.setData(str.getBytes());
			packet.setLength(str.getBytes().length);
			one.send(packet);
			//设置接收包
			packet.setData(new byte[1024]);
			packet.setLength(1024);
                        //接收
			one.receive(packet);
			str = new String(packet.getData(), 0, packet.getLength());
			System.out.println(str);
		}
	}
}

2、客户端二

public class ChatTwo {
	public static void main(String[] args) throws Exception{

		DatagramSocket two = new DatagramSocket(9999);
		Scanner sc = new Scanner(System.in);
		DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
		
		while (true) {
			two.receive(packet);
			String str = new String(packet.getData(), 0, packet.getLength());
			System.out.println(str);

                        //设置接收包
			str = sc.nextLine();
			packet.setData(str.getBytes());
			packet.setLength(str.getBytes().length);
			packet.setAddress(InetAddress.getByName("127.0.0.1"));
			packet.setPort(11223);

			two.send(packet);
		}
	}
}

 

你可能感兴趣的:(Java)