Java UDP聊天程序

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

Code:
  1. packagetest;
  2. importjava.awt.BorderLayout;
  3. importjava.awt.List;
  4. importjava.awt.TextField;
  5. importjava.awt.event.ActionEvent;
  6. importjava.awt.event.ActionListener;
  7. importjava.io.IOException;
  8. importjava.net.DatagramPacket;
  9. importjava.net.DatagramSocket;
  10. importjava.net.InetAddress;
  11. importjava.net.SocketException;
  12. importjava.net.UnknownHostException;
  13. importjavax.swing.JFrame;
  14. importjavax.swing.JPanel;
  15. publicclassnetchat{
  16. JFramejf=newJFrame("聊天窗口");
  17. Listl=newList(6);
  18. JPaneljp=newJPanel();
  19. TextFieldtip=newTextField(15);
  20. TextFieldtdata=newTextField(15);
  21. DatagramSocketds;
  22. //DatagramPacketdp;
  23. publicnetchat(){
  24. tip.setText("127.0.0.1");
  25. try{
  26. ds=newDatagramSocket(3000);
  27. }catch(SocketExceptione){
  28. e.printStackTrace();
  29. }
  30. newThread(newRunnable()
  31. {
  32. DatagramPacketdp;
  33. publicvoidrun(){
  34. byte[]buf=newbyte[1024];
  35. dp=newDatagramPacket(buf,1024);
  36. while(true){
  37. try{
  38. ds.receive(dp);
  39. //l.add(dp.getAddress().getHostName()+"say:"+new
  40. //String(buf,0,dp.getLength()),-1);
  41. //l.add(dp.getAddress().getHostAddress()+"say:"+new
  42. //String(buf,0,+dp.getLength()),-1);
  43. System.out.println("aaaa");
  44. Stringstr=newString(dp.getData(),0,dp.getLength());
  45. System.out.println("数据1是:"+str);
  46. Stringstr2=newString(buf,0,dp.getLength());
  47. System.out.println("数据2是:"+str2);
  48. l.add(dp.getAddress().getHostAddress()+"say:"+str,
  49. -1);
  50. }catch(IOExceptione){
  51. e.printStackTrace();
  52. }
  53. }
  54. }
  55. }).start();
  56. }
  57. publicstaticvoidmain(String[]args){
  58. newnetchat().init();
  59. }
  60. privatevoidinit(){
  61. jf.add(l);
  62. jp.add(tip,BorderLayout.WEST);
  63. jp.add(tdata,BorderLayout.EAST);
  64. jf.add(jp,BorderLayout.SOUTH);
  65. jf.setSize(400,300);
  66. jf.setVisible(true);
  67. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  68. tdata.addActionListener(newActionListener(){
  69. publicvoidactionPerformed(ActionEvente){
  70. byte[]buf;
  71. Stringstr222=e.getActionCommand();
  72. buf=str222.getBytes();
  73. System.out.println("ddd="+str222);
  74. l.add("我说:"+str222,-1);
  75. //buf=e.getActionCommand().getBytes();
  76. DatagramPacketdp;
  77. try{
  78. dp=newDatagramPacket(buf,buf.length,InetAddress
  79. .getByName(tip.getText()),3000);
  80. ds.send(dp);
  81. }catch(UnknownHostExceptione1){
  82. e1.printStackTrace();
  83. }catch(IOExceptione1){
  84. e1.printStackTrace();
  85. }
  86. ((TextField)e.getSource()).setText("");
  87. }
  88. });
  89. }
  90. }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值