java se-java udp发送端接收端变成问题求大神解答。

问题描述

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命令行输入中文没有问题,这是为什么呢?

解决方案四:

流没有关闭,导致程序死了。

时间: 2024-08-31 05:42:29

java se-java udp发送端接收端变成问题求大神解答。的相关文章

对java中递归问题的输出不理解,求大神解答!谢谢

问题描述 对java中递归问题的输出不理解,求大神解答!谢谢 对于这一段代码我能够理解,压栈然后出栈就是6,5,4 package recursion; public class testRecursion { public static void main(String[] args) { int num=3; recursion(num); } private static void recursion(int n){ n++; if(n<7){ recursion(n); System.o

java笔试-基础面试题,求大神解答啊,不要太官方的,用自己的话阐述!!!!!!!!!

问题描述 基础面试题,求大神解答啊,不要太官方的,用自己的话阐述!!!!!!!!! 解决方案 sql中的like 没有任何意义,因为没有通配符,还不如用相等条件,再有就是 in的效率比较低,可以考虑inner join 解决方案二: 那段迭代器代码不能运行,要使用迭代器删除集合,就不要直接操作集合,而要操作迭代器,改成 iterator.remove(); 解决方案三: 10:java内存泄露的理解与解决 8:select emp.firstname,emp.surname from emplo

求大神解答一下-java中对象流objectstream问题

问题描述 java中对象流objectstream问题 输出的为什么不是cyh男20 ym女20求大神解答!!!!!!!!!! 解决方案 你的代码和我这个一样吗?麻烦把你的代码粘全了,我看看 解决方案二: 这个是照片......... 解决方案三: 我和你写的差不多,不知道你为啥会这样,我给你粘出我的代码package lianxi; import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOE

方法-将java项目打成exe或者cmd文件问题,求大神,急,感激不尽

问题描述 将java项目打成exe或者cmd文件问题,求大神,急,感激不尽 可以将一个java 项目打成一个exe或者cmd文件吗?可以让用户双击运行 之后调用我的某类的main方法 解决方案 最方便的工具用exe4j百度有.你的java得有main方法 解决方案二: 教你打包Java程序,jar转exe随处可跑

界面-java 简易计算器,最后得数不能出现,求大神帮忙

问题描述 java 简易计算器,最后得数不能出现,求大神帮忙 (1)编写一个简易计算器程序,其界面如下图所示: (2)当按下"+"按钮时,两个数值文本框之间应显示"+"号,同时相加结果显示在第三个文本框内(如下图所示).类似处理"-"."*"和"/"按钮. 现在第二步能够出现加号 就是不能正确运算.如下代码,注释的地方为什么不能运行,该怎么做才能做到当按下加的按钮b1时,同时出现加号和得数?这里的tf和tf

求大神解答关于java string字符串的问题,现有如下要截取,希望按括号分组

问题描述 求大神解答关于java string字符串的问题,现有如下要截取,希望按括号分组 如下字符串:希望每个括号之间的内容分一组变成子字符串,或者输出到文本每个括号之间的内容为一行.丢弃其余的部分 CF --> ('c1,t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t i t

java switch-关于Switch语句,求大神解答!感谢!

问题描述 关于Switch语句,求大神解答!感谢! public class HelloWorld { public static void main(String[] args) { int num=1; switch(num){ case 1: System.out.println("1"); case 2: System.out.println("2"); break; case 3: System.out.println("3"); br

用java实现这个计算器为什么不能用(点击按钮为啥没反应),求大神解答??

问题描述 用java实现这个计算器为什么不能用(点击按钮为啥没反应),求大神解答?? import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JP

java多线程问题-有一道Java面试题,没太理解明白,求大神指点啊~

问题描述 有一道Java面试题,没太理解明白,求大神指点啊~ package test2; /** 设计4个线程,其中两个线程每次对i增加1,另外两个线程对i每次减少1 @author liuyu * */ public class Test { private int i ; private synchronized void inc(){ i ++; System. out .println(Thread.currentThread().getName()+ "--inc--" +