使用UDP模拟客户端和服务端聊天,但是客户端发送一条消息之后就不能再连续发了,只能等服务端响应之后才能接着发送第二条,怎么解决这个问题啊?求大牛讲解?
下面是源码
服务端
public class Server {
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
//服务端(接收方)的端口
DatagramSocket ds=new DatagramSocket(8886);
System.out.println("服务端已经启动!");
while(true) {
//准备收数据
byte[] b=new byte[1024];
DatagramPacket dp=new DatagramPacket(b, b.length);
//开始收 收到的是字节数组
ds.receive(dp);
System.out.println(new String(dp.getData(),0,dp.getLength()));
System.out.println("对方IP地址:"+dp.getAddress()+" "+"端口:"+dp.getPort());
//发数据
//准备数据
String s=scanner.next();
byte[] buf=s.getBytes();
//打包
DatagramPacket dp2=new DatagramPacket(buf, buf.length,dp.getAddress(),dp.getPort());
ds.send(dp2);
if("bye".equals(s)) {
break;
}
}
ds.close();
}
}
客户端
public class Client {
public static void main(String[] args) throws SocketException, IOException {
Scanner scanner=new Scanner(System.in);
//发数据
DatagramSocket ds=new DatagramSocket(9999);//客户端的端口号是9999
System.out.println("客户端已经启动,开始聊天吧?!");
while(true) {
String s=scanner.next();
byte[] buf=s.getBytes();
DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),8886);
ds.send(dp);
byte[] buf2=new byte[1024];
DatagramPacket dp2=new DatagramPacket(buf2, buf2.length);
ds.receive(dp2);
System.out.println("对方IP地址:"+dp2.getAddress()+" "+"端口:"+dp2.getPort());
String str=new String(dp2.getData(),0,dp2.getLength());
System.out.println(str);
if("bye".equals(str)) {
break;
}
}
ds.close();
}
}