利用UDP协议的发送和接收,模拟聊天小程序
创建聊天程序的A端:
1、发送信息到接收端
1
、准备发送的信息【键盘录入】
2
、指定接受端的
ip
3
、指定接收端的端口
4
、打包【创建
DatagramPacket
的对象】
5
、发送【创建
DatagramSocket
的对象】
2、接收接收回复的信息
1
、准备接收使用字节数组
2
、把数组封装为数据报包【创建
DatagramPacket
的对象】
3
、接收数据
4
、解析报包有效数据
3
、上述操作循环操作
创建聊天程序的B端:
1、接收发送端的信息
1
、准备接收使用字节数组
2
、把数组封装为数据报包【创建
DatagramPacket
的对象】
3
、接收数据【创建
DatagramSocket
的对象】
4
、解析报包有效数据
2、回复发送端的信息
1
、准备发送的信息【键盘录入】
2
、指定发送的
ip
【解析接收的报包的
ip
即可】
3
、指定接收端的端口【解析接收的报包的端口即可】
4
、打包【创建
DatagramPacket
的对象】
5
、发送
3、上述操作循环操作
端口一:
package com.offcn.second;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class MyQQ {
public static void main(String[] args) throws Exception{
DatagramSocket ds = new DatagramSocket();
Scanner sc= new Scanner(System.in);
while(true){
//发送消息
System.out.print("My:");
//输入发送信息
String smsg = sc.nextLine();
//byte[] sbs = smsg.getBytes();
//int slen = sbs.length;
//创建数据包
DatagramPacket sdp = new DatagramPacket(smsg.getBytes(),//数据转为byte数组
smsg.getBytes().length,//数据长度
InetAddress.getLocalHost(),//接收端端口号
9999);//接收端,端口号
//发送
ds.send(sdp);
//接收消息
//创建接收数据的数据包
DatagramPacket rdp = new DatagramPacket(new byte[1024],1024);
//接收数据
ds.receive(rdp);
//将接收的数据转为字符串
String rmsg = new String(rdp.getData(),0,rdp.getLength());
//打印输出
System.out.println("His:"+rmsg);
}
}
}
端口二:
package com.offcn.second;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Scanner;
public class HisQQ {
public static void main(String[] args) throws Exception{
DatagramSocket ds = new DatagramSocket(9999);
Scanner sc = new Scanner(System.in);
while(true){
//创建接收数据的数据包
DatagramPacket rdp = new DatagramPacket(new byte[1024],1024);
ds.receive(rdp);
//将接收的数据转换为字符串
String rmsg = new String(rdp.getData(),0,rdp.getLength());
//输出接收到的信息
System.out.println("His:"+rmsg);
//给对方回消息
//输入发送的数据
System.out.print("My:");
String smsg = sc.nextLine();
//创建发送数据的数据包
DatagramPacket sdp = new DatagramPacket(smsg.getBytes(),
smsg.getBytes().length,
rdp.getAddress(),
rdp.getPort());
ds.send(sdp);
}
}
}
运行结果: