问题描述
- java udp发送端接收端变成问题求大神解答。
-
采用了多线程,如果发送端输入的是英文,接收端可以正常接收。
但是如果发送端输入的是中文,接收端无法接收,而且程序会卡。这是怎么回事?代码如下:
主程序代码:
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();
}
}
}
}
困扰了我很长时间了。。求大神解答。
解决方案
如果是第一次运行主程序代码就输入中文,第一次能被打印,但第二次开始,输入的中文在命令行中无法显示,且无法打印,这是为什么呢?
解决方案二:
如果是第一次运行主程序代码就输入中文,第一次能被打印,但第二次开始,输入的中文在命令行中无法显示,且无法打印,这是为什么呢?
解决方案三:
用DOS命令行输入中文没有问题,这是为什么呢?
解决方案四:
流没有关闭,导致程序死了。