在做那个UDP交流时,会出现堵塞情况。如:服务端输出到客户端。在客户端中,第一次接收到的是空的内容,在客户端输出内容后,然后再接收服务端的内容,就会出现服务端第一次输出的内容,很奇怪,有意者请棒忙弄弄,代码如下:
客户端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;
public class claint { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String p;
DatagramSocket oo=new DatagramSocket(2000);
byte[] x=new byte[120];
byte[] j=new byte[120];
boolean frag=true;
String e;
DatagramPacket i=new DatagramPacket(x,x.length);
System.out.println("您是顾客,您先说:");
while(frag){
System.out.println("您说:");
System.out.print(" ");
Scanner input=new Scanner(System.in);
p=input.next();
j=null;
j=p.getBytes();
InetAddress n;
n=InetAddress.getLocalHost();
DatagramPacket k=new DatagramPacket(j,j.length,n,3000);
oo.send(k);
System.out.println("他说:");
oo.receive(i);
String ni=new String(i.getData());
System.out.println(" "+ni);
}
oo.close();
}}
服务器端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class sdd {
public static void main(String args[]) throws IOException{
DatagramSocket b=new DatagramSocket(3000); byte[] buf=new byte[120];
DatagramPacket a=new DatagramPacket(buf,buf.length);
byte[] po=new byte[120];
InetAddress m;
m=InetAddress.getLocalHost();
boolean frag=true;
System.out.println("已经接通了。");
while(frag){
b.receive(a);
String j=new String(a.getData());
System.out.println("客户端说:");
System.out.println(" "+j);
if(j.equals("bye")){
frag=false;
}
System.out.println("您说:");
System.out.print(" ");
DatagramPacket l=new DatagramPacket(po,po.length,m,2000);
Scanner input=new Scanner(System.in);
String k=input.next();
po=k.getBytes();
b.send(l);
}
}
}
客户端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;
public class claint { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String p;
DatagramSocket oo=new DatagramSocket(2000);
byte[] x=new byte[120];
byte[] j=new byte[120];
boolean frag=true;
String e;
DatagramPacket i=new DatagramPacket(x,x.length);
System.out.println("您是顾客,您先说:");
while(frag){
System.out.println("您说:");
System.out.print(" ");
Scanner input=new Scanner(System.in);
p=input.next();
j=null;
j=p.getBytes();
InetAddress n;
n=InetAddress.getLocalHost();
DatagramPacket k=new DatagramPacket(j,j.length,n,3000);
oo.send(k);
System.out.println("他说:");
oo.receive(i);
String ni=new String(i.getData());
System.out.println(" "+ni);
}
oo.close();
}}
服务器端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class sdd {
public static void main(String args[]) throws IOException{
DatagramSocket b=new DatagramSocket(3000); byte[] buf=new byte[120];
DatagramPacket a=new DatagramPacket(buf,buf.length);
byte[] po=new byte[120];
InetAddress m;
m=InetAddress.getLocalHost();
boolean frag=true;
System.out.println("已经接通了。");
while(frag){
b.receive(a);
String j=new String(a.getData());
System.out.println("客户端说:");
System.out.println(" "+j);
if(j.equals("bye")){
frag=false;
}
System.out.println("您说:");
System.out.print(" ");
DatagramPacket l=new DatagramPacket(po,po.length,m,2000);
Scanner input=new Scanner(System.in);
String k=input.next();
po=k.getBytes();
b.send(l);
}
}
}
输入到对方那个控制台,应该先输入字符串,
然后在发送消息