A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

先说说我的问题  
1.我的页面编码是UTF-8  电脑默认编码是GBK
2.代码
UDP 发送端
  1. public static void main(String[] args) throws Exception {

  2. DatagramSocket socket = new DatagramSocket(7777);
  3. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  4. String line = null;
  5. byte[] buf = new byte[8192];
  6. DatagramPacket packet = null;
  7. while ((line = br.readLine()) != null) {
  8. if("88".equals(line))
  9. break;
  10. buf = line.getBytes();
  11. packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10000);
  12. socket.send(packet);
  13. }
  14. br.close();
  15. socket.close();

  16. }
  17. }
复制代码
UDP接收端
  1. public static void main(String[] args) throws Exception, UnknownHostException {


  2. DatagramSocket socket = new DatagramSocket(10000);

  3. while (true) {

  4. byte[] buf = new byte[1024*64];
  5. DatagramPacket packet = new DatagramPacket(buf, buf.length);
  6. socket.receive(packet);
  7. System.out.println(new String(packet.getData(),"UTF-8"));



  8. }

  9. }


  10. }
复制代码
3.我在发送端发送你好  在接收端出现浣犲ソ 这说明了 UTF-8编码  GBK解码  我想问的是
DatagramPacket怎么能用UTF-8 解码 或者是 让我的程序不出现错误 求高手啊























评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 未知数|X| 于 2013-11-1 12:47 编辑

发送端
public static void main(String[] args) throws Exception {
        
        DatagramSocket socket = new DatagramSocket();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        byte[] buf = new byte[8192];
        DatagramPacket packet = null;
        while ((line = br.readLine()) != null) {
        if("88".equals(line))
        break;
        buf = line.getBytes("UTF-8");
        packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10000);
        socket.send(packet);
        }
        br.close();
        socket.close();
        
        }
接收端
DatagramSocket socket = new DatagramSocket(10000);

                while (true) {

                byte[] buf = new byte[1024*64];
                DatagramPacket packet = new DatagramPacket(buf, buf.length);
                socket.receive(packet);
                 
                System.out.println( new String(packet.getData(),"UTF-8"));



                }
这样就可以了 你两边要统一,要么都写要么都不写
发送端 buf = line.getBytes("UTF-8");
接收端System.out.println( new String(packet.getData(),"UTF-8"));
回复 使用道具 举报
本帖最后由 qixing0918 于 2013-11-1 14:08 编辑

我按你说的做还是不行  我有想了想  既然是用的是UTF-8编码 GBK解码 出错 而且我不能改变解码方式   那么我就改变编码 用GBK
发送端
  1. public class UDPSend2 {

  2. public static void main(String[] args) throws Exception {

  3. DatagramSocket socket = new DatagramSocket(7777);
  4. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  5. String line = null;
  6. byte[] buf = new byte[8192];
  7. DatagramPacket packet = null;
  8. while ((line = br.readLine()) != null) {
  9. if("88".equals(line))
  10. break;
  11. buf = line.getBytes("GBK");
  12. packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10000);
  13. socket.send(packet);
  14. }
  15. br.close();
  16. socket.close();

  17. }
  18. }
复制代码
竟然通过了 我分析
1.buf = line.getBytes("GBK"); 你好俩字变成字节 而DatagramPacket packet = new DatagramPacket(buf, buf.length); 是默认去查GBK码表  所以出来了
2.你的那种在我的机器试过了 不行 不知道怎么回事
3.我用你那种方法 代码
  1. public class UDPReceive {
  2. /*
  3. * 1.定义socket在接收端的socket要有端口号 2.定义packet 接收数据 3.取出来打印
  4. */

  5. public static void main(String[] args) throws Exception, UnknownHostException {


  6. DatagramSocket socket = new DatagramSocket(10000);

  7. while (true) {

  8. byte[] buf = new byte[40];
  9. DatagramPacket packet = new DatagramPacket(buf, buf.length);
  10. socket.receive(packet);

  11. System.out.println(Arrays.toString(packet.getData()));
  12. System.out.println(new String(packet.getData(),"UTF-8"));



  13. }

  14. }


  15. }
复制代码
结果
[-26, -75, -93, -25, -118, -78, -29, -126, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
浣犲ソ
解码出现问题了
System.out.println(new String(packet.getData(),"UTF-8")); 这句话为什么不能按UTF-8解码  求解!!!!!!







回复 使用道具 举报
谁帮解一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马