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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ぺsimon☆ 中级黑马   /  2013-5-6 16:36  /  1528 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 这是一个聊天程序
  3. */

  4. import java.io.*;
  5. import java.net.*;

  6. class UdpSend2 implements Runnable
  7. {
  8.         private DatagramSocket dgs;
  9.         UdpSend2(DatagramSocket dgs)
  10.         {
  11.         this.dgs=dgs;
  12.         }

  13.         public void run()
  14.         {
  15.         try
  16.         {
  17.         //键盘录入
  18.         BufferedReader bur=new BufferedReader(new InputStreamReader

  19. (System.in));

  20.         String line=null;
  21.         //读取键盘的数据
  22.         while((line=bur.readLine())!=null)
  23.         {
  24.         if("886".equals(line)) //判断结束标记
  25.         break;
  26.         byte[] buf=line.getBytes();//把字符串转为字节数组
  27.        
  28.         //定义一个数据包,并把数据存储在包中
  29.         DatagramPacket dgp=new DatagramPacket

  30. (buf,buf.length,InetAddress.getByName("169.254.0.254"),1003);

  31.         dgs.send(dgp);//把数据包发送到指定的端口

  32.         }
  33.         dgs.close();//关闭资源
  34.         }
  35.         catch(Exception e)
  36.         {
  37.         throw new RuntimeException("发送失败");
  38.         }
  39.         }
  40. }

  41. class UdpRece2 implements Runnable
  42. {
  43.         private DatagramSocket dgs;
  44.         UdpRece2(DatagramSocket dgs)
  45.         {
  46.         this.dgs=dgs;
  47.         }

  48.         public void run()
  49.         {
  50.         while(true)
  51.         {
  52.         try
  53.         {
  54.         byte[] buf=new byte[1024];//定义数组
  55.         //定义一个数据包
  56.         DatagramPacket dgp=new DatagramPacket(buf,buf.length);

  57.         dgs.receive(dgp);//接受端口发来的数据,存储在dgp包中,阻塞式语句

  58.         String ip=dgp.getAddress().getHostAddress();//得到数据的ip地址
  59.         //得到数据包中的内容
  60.         String data=new String(dgp.getData(),dgp.getLength());
  61.         //得到数据包的端口
  62.         int port=dgp.getPort();

  63.         System.out.println("ip:"+ip+"..."+"data:"+data+"port:"+port);
  64.         }

  65.         catch(Exception e)
  66.         {
  67.         throw new RuntimeException("接受信息失败");
  68.         }
  69.         }
  70.         }
  71. }

  72. class UdpDemo
  73. {
  74.         public static void main(String[] args)throws Exception
  75.         {
  76.         DatagramSocket send=new DatagramSocket();
  77.         DatagramSocket rece=new DatagramSocket(1003);//指定端口

  78.         UdpSend2 usend=new UdpSend2(send);
  79.         UdpRece2 urece=new UdpRece2(rece);
  80.         //开启线程
  81.         new Thread(usend).start();
  82.         new Thread(urece).start();
  83.         }
  84. }

  85. /*
  86. 谢谢各位兄弟
  87. 错误提示:
  88. E:\Java\jdk1.6.0_23\experience_heima\23>javac UdpDemo.java
  89. 注意:UdpDemo.java 使用或覆盖了已过时的 API。
  90. 注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
  91. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 HM朱蛟 于 2013-5-7 00:25 编辑



2个问题
1:
72行 改成  String data=new String(dgp.getData(),dgp.0,getLength());
2:
try 的作用域应该涵盖while语句

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 孙金鑫 于 2013-5-7 00:43 编辑

  1. <DIV class=blockcode>
  2. <BLOCKQUOTE>/*
  3. 这是一个聊天程序
  4. */

  5. import java.io.*;
  6. import java.net.*;

  7. class UdpSend2 implements Runnable
  8. {
  9. private DatagramSocket dgs;
  10. UdpSend2(DatagramSocket dgs)
  11. {
  12. this.dgs=dgs;
  13. }

  14. public void run()
  15. {
  16. try
  17. {
  18. //键盘录入
  19. BufferedReader bur=new BufferedReader(new InputStreamReader(System.in));

  20. String line=null;
  21. //读取键盘的数据
  22. while((line=bur.readLine())!=null)
  23. {
  24. if("886".equals(line)) //判断结束标记
  25. break;
  26. byte[] buf=line.getBytes();//把字符串转为字节数组

  27. //定义一个数据包,并把数据存储在包中
  28. DatagramPacket dgp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.102"),10003);

  29. dgs.send(dgp);//把数据包发送到指定的端口

  30. }
  31. // dgs.close();//关闭资源
  32. }
  33. catch(Exception e)
  34. {
  35. throw new RuntimeException("发送失败");
  36. }
  37. }
  38. }

  39. class UdpRece2 implements Runnable
  40. {
  41. private DatagramSocket dgs;
  42. UdpRece2(DatagramSocket dgs)
  43. {
  44. this.dgs=dgs;
  45. }

  46. public void run()
  47. {
  48. while(true)
  49. {
  50. try
  51. {
  52. byte[] buf=new byte[1024];//定义数组
  53. //定义一个数据包
  54. DatagramPacket dgp=new DatagramPacket(buf,buf.length);

  55. dgs.receive(dgp);//接受端口发来的数据,存储在dgp包中,阻塞式语句

  56. String ip=dgp.getAddress().getHostAddress();//得到数据的ip地址
  57. //得到数据包中的内容
  58. String data=new String(dgp.getData(),0,dgp.getLength()); //注意这里!!!!!!!你少了一个0……
  59. //得到数据包的端口
  60. int port=dgp.getPort();

  61. System.out.println("ip:"+ip+"..."+"data:"+data+"port:"+port);
  62. }

  63. catch(Exception e)
  64. {
  65. throw new RuntimeException("接受信息失败");
  66. }
  67. }
  68. }
  69. }

  70. class UdpDemo
  71. {
  72. public static void main(String[] args)throws Exception
  73. {
  74. DatagramSocket send=new DatagramSocket();
  75. DatagramSocket rece=new DatagramSocket(10003);//指定端口

  76. UdpSend2 usend=new UdpSend2(send);
  77. UdpRece2 urece=new UdpRece2(rece);
  78. //开启线程
  79. new Thread(usend).start();
  80. new Thread(urece).start();
  81. }
  82. }


  83. /*
  84. 换了下IP地址,自己改回来,注意下70行
  85. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马