package cn;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
/**客户端1
*/
public class UDPClient1 {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket(8888);//本应用程序端口
while (true){
try {
//准备要发送的数据
byte[]buf = talk().getBytes();
//创建数据对象
DatagramPacket dp1 = new DatagramPacket(
buf, buf.length, InetAddress.getByName("localhost"), 9999);
//发送数据
ds.send(dp1);
byte[]buf2 = new byte[8196];
DatagramPacket dp2 = new DatagramPacket(
buf, buf.length);
ds.receive(dp2);
System.out.println(new String(dp2.getData()));
buf2=null;
buf2 = new byte[1024];//清空残余数据
} catch (IOException e) {
e.printStackTrace();
//关闭
ds.close();
}
}
}
/**
* 用户输入聊天信息
* @return
*/
public static String talk(){
Scanner sc = new Scanner(System.in);
return "客户端1:"+sc.nextLine();
}
}
package cn;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
/**客户端2
*/
public class UDPCLient2 {
public static void main(String[] args) throws IOException {
DatagramSocket ds1 = new DatagramSocket(9999);
byte []buf = new byte[8196];
while (true){
DatagramPacket dp1 = new DatagramPacket(
buf,buf.length);
//查看接收到的数据
ds1.receive(dp1);
String str = new String(dp1.getData());
buf=null;//清空残余数据,重新分配新的空间
buf = new byte[8196];
System.out.println(str);
byte[]buf2 = talk().getBytes();
DatagramPacket dp2 = new DatagramPacket(
buf2,buf2.length,dp1.getAddress(),dp1.getPort());
try {
ds1.send(dp2);
} catch (IOException e) {
e.printStackTrace();
//关闭流
ds1.close();
}
}
}
/**
* 用户输入聊天信息
* @return
*/
public static String talk(){
Scanner sc = new Scanner(System.in);
return "客户端2:"+sc.nextLine();
}
}
上述代码实现了两个客户端的简单通信。
但是有BUG,就是两个客户端启动后,只有客户端1给客户端2发送数据后,双方通信才正常。
原因可能是客户端2在通信前不知道客户端的地址和端口号
目前暂时找不到解决办法,请老师给指导指导呗,谢谢@_@