Java UDP聊天程序

       同学网上找的代码,说会乱码。看了源码,没发现什么原因,运行起来对方发送过来的字符串确实是乱码的。同学用的NetBeans我用的Eclipse,而NetBeans默认的编码是UTF-8,Eclipse默认的是GBK;琢磨着就是这个引起的。。。。都改成一样的编码就没事了。代码如下:

Code:
  1. package test;   
  2.   
  3. import java.awt.BorderLayout;   
  4. import java.awt.List;   
  5. import java.awt.TextField;   
  6. import java.awt.event.ActionEvent;   
  7. import java.awt.event.ActionListener;   
  8. import java.io.IOException;   
  9. import java.net.DatagramPacket;   
  10. import java.net.DatagramSocket;   
  11. import java.net.InetAddress;   
  12. import java.net.SocketException;   
  13. import java.net.UnknownHostException;   
  14.   
  15. import javax.swing.JFrame;   
  16. import javax.swing.JPanel;   
  17.   
  18. public class netchat {   
  19.   
  20.     JFrame jf = new JFrame("聊天窗口");   
  21.     List l = new List(6);   
  22.     JPanel jp = new JPanel();   
  23.     TextField tip = new TextField(15);   
  24.     TextField tdata = new TextField(15);   
  25.     DatagramSocket ds;   
  26.   
  27.     // DatagramPacket dp;   
  28.     public netchat() {   
  29.         tip.setText("127.0.0.1");   
  30.         try {   
  31.             ds = new DatagramSocket(3000);   
  32.         } catch (SocketException e) {   
  33.             e.printStackTrace();   
  34.         }   
  35.         new Thread(new Runnable()   
  36.   
  37.         {   
  38.             DatagramPacket dp;   
  39.   
  40.             public void run() {   
  41.                 byte[] buf = new byte[1024];   
  42.                 dp = new DatagramPacket(buf, 1024);   
  43.                 while (true) {   
  44.                     try {   
  45.                         ds.receive(dp);   
  46.                         // l.add(dp.getAddress().getHostName()+"say:"+new   
  47.                         // String(buf,0,dp.getLength()), -1);   
  48.                         // l.add(dp.getAddress().getHostAddress()+" say:"+new   
  49.                         // String(buf,0,+dp.getLength()), -1);   
  50.                         System.out.println("aaaa");   
  51.   
  52.                         String str = new String(dp.getData(), 0, dp.getLength());   
  53.                         System.out.println("数据1是:" + str);   
  54.   
  55.                         String str2 = new String(buf, 0, dp.getLength());   
  56.                         System.out.println("数据2是:" + str2);   
  57.   
  58.                         l.add(dp.getAddress().getHostAddress() + " say:" + str,   
  59.                                 -1);   
  60.                     } catch (IOException e) {   
  61.                         e.printStackTrace();   
  62.                     }   
  63.                 }   
  64.             }   
  65.         }).start();   
  66.   
  67.     }   
  68.   
  69.     public static void main(String[] args) {   
  70.         new netchat().init();   
  71.     }   
  72.   
  73.     private void init() {   
  74.         jf.add(l);   
  75.         jp.add(tip, BorderLayout.WEST);   
  76.         jp.add(tdata, BorderLayout.EAST);   
  77.         jf.add(jp, BorderLayout.SOUTH);   
  78.         jf.setSize(400300);   
  79.         jf.setVisible(true);   
  80.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  81.   
  82.         tdata.addActionListener(new ActionListener() {   
  83.             public void actionPerformed(ActionEvent e) {   
  84.                 byte[] buf;   
  85.   
  86.                 String str222 = e.getActionCommand();   
  87.                 buf = str222.getBytes();   
  88.                 System.out.println("ddd=" + str222);   
  89.                 l.add("我说:" + str222, -1);   
  90.                 // buf = e.getActionCommand().getBytes();   
  91.                 DatagramPacket dp;   
  92.   
  93.                 try {   
  94.                     dp = new DatagramPacket(buf, buf.length, InetAddress   
  95.                             .getByName(tip.getText()), 3000);   
  96.                     ds.send(dp);   
  97.                 } catch (UnknownHostException e1) {   
  98.                     e1.printStackTrace();   
  99.                 } catch (IOException e1) {   
  100.                     e1.printStackTrace();   
  101.                 }   
  102.                 ((TextField) e.getSource()).setText("");   
  103.             }   
  104.         });   
  105.     }   
  106.   
  107. }   

运行结果就是一个小窗体。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值