采用了多线程,如果发送端输入的是英文,接收端可以正常接收。
但是如果发送端输入的是中文,接收端无法接收,而且程序会卡。这是怎么回事?代码如下:
主程序代码:
public class ChatDemo {
public static void main(String[] args) throws IOException {
DatagramSocket dss=new DatagramSocket();
DatagramSocket dsr=new DatagramSocket(10002);
Sends send=new Sends(dss);
Receives rec=new Receives(dsr);
new Thread(send).start();
new Thread(rec).start();
}
}
发送端代码:
public class Sends implements Runnable {
private DatagramSocket ds;
public Sends(DatagramSocket ds){
this.ds=ds;
}
@Override
public void run() {
BufferedReader bufr =new BufferedReader(new InputStreamReader(System.in));
String s=null;
try {
while((s=bufr.readLine())!=null){
byte [] b=s.getBytes();
DatagramPacket dp=new DatagramPacket(b,b.length,InetAddress.getByName("192.168.0.103"),10002 );
ds.send(dp);
if(s.equals("over")){
System.out.println();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
接收端代码:
public class Receives implements Runnable{
private DatagramSocket ds;
public Receives(DatagramSocket ds){
this.ds=ds;
}
public void run(){
while(true){
byte[] b=new byte[1024];
DatagramPacket dp=new DatagramPacket(b,b.length);
try {
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String s=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"....."+s);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
困扰了我很长时间了。。求大神解答。