/**
*
* @author dch
*
*/
//UDP实现两人聊天
public class Sender {
public static void main(String[] args) {
//初始化发送和接收数据报数据包的套接字
DatagramSocket ds = null;
try {
System.out.println("同学甲开始聊天:");
//构造数据报套接字并将其绑定到本地主机上的指定端口
ds = new DatagramSocket(8888);
while(true){
Scanner sc = new Scanner(System.in);
System.out.print("同学甲:");
//接收键盘输入同学甲的话,读一行
String str = sc.nextLine();
//把读的字符串放进byte数组中
byte [] b = str.getBytes();
//创建数据包,并把数据打包成数据报包
DatagramPacket dp = new DatagramPacket(b,0,b.length,InetAddress.getByName("192.168.3.143"),7777);
//发送数据报包
//DatagramSocket ds = new DatagramSocket();
ds.send(dp);
//DatagramSocket ds1 = new DatagramSocket(8888);
//准备一个空的包来接收数据,大小为1M
byte [] b1 = new byte[1024*1024];
//将字节数组打包成数据报包
DatagramPacket dp1 = new DatagramPacket(b1,0,b1.length);
//接收数据报包
ds.receive(dp1);
//将同学乙打印到控制台,这里dp1.getLength()实际读到的长度.
System.out.println("同学乙:"+new String(b1,0,dp1.getLength()));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
ds.close();
}
}
/*
* 思考:n个主机聊天
* 其中一个主机说话,这个主机要将数据打包成数据报包也需要输入其他主机的ip;
* 其他主机都能接收,那么其他n-1个主机都要去绑定第一个主机的端口号;
* 这样的话,是不是说,要写n-1个将数据打包成数据报包的语句(带有ip和port)(用于发送);
* 要写n-1个接收将数据打包的数据报包的语句(用于接收).
*
*
* */
}
/**
*
* @author dch
*
*/
public class Receiver {
public static void main(String[] args) {
//初始化可以发送和接收数据报包的套接字
DatagramSocket ds = null;
try {
System.out.println("同学乙开始聊天:");
//土 话:接收端口号为7777发过来的数据报包
//官方解释:构造数据报套接字并将其绑定到本地主机上的指定端口
ds = new DatagramSocket(7777);
//循环多次交流
while(true){
//准备一个空的数据包,接收数据,大小为1M
byte [] b = new byte[1024*1024];
//将字节数组打包成数据报包(这种是接收的打包)
DatagramPacket dp = new DatagramPacket(b,0,b.length);
//接收数据报包
ds.receive(dp);
//将同学甲的话打印到控制台
System.out.println("同学甲:"+new String(b,0,dp.getLength()));
//同学乙开始说话
Scanner sc = new Scanner(System.in);
System.out.print("同学乙:");
//用字符串str接收键盘输入的同学乙说的话,读一行
String str = sc.nextLine();
//将str字符串转换成字节并存入字节数组
byte [] b1 = str.getBytes();
//把字节数组打包成数据报包(这种是发送的打包)
DatagramPacket dp1 = new DatagramPacket(b1,0,b1.length,InetAddress.getByName("192.168.3.143"),8888);
//发送数据报包
ds.send(dp1);
}
} catch (Exception e) {
// TODO: handle exception
}finally{
//释放资源
ds.close();
}
}
}