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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周素强 中级黑马   /  2012-5-7 15:57  /  2109 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周素强 于 2012-5-7 20:32 编辑

看视频老师讲的UDP协议写的简单聊天工具,自己也写了写 可是不知为什么发送没有问题,只是接收端为什么会出现两次,也就是说发送一行文字,而接收方显示出两行相同的文字,求解释?是不是因为连接外网的原因。   ("192.168.1.255")//经过一位同学的提示把地址改成本地回路地址:127.0.0.1后就成了一行输出了,但还是不知道其中道理?
通过QQ群里的同学们一起探讨问题原因似乎找到了,因为我机子上有两个网卡,一个是无线的一个是机子上的有线的,我现在用的是无线的。问题好像是找到了 但是原理不是不清楚??
  1. import java.io.*;
  2. import java.net.*;

  3. class Send2 implements Runnable
  4. {
  5.         private DatagramSocket ds;
  6.         public Send2(DatagramSocket ds)
  7.         {
  8.                 this.ds = ds;
  9.         }
  10.     public void run()
  11.         {
  12.                 try
  13.                 {
  14.                         BufferedReader bufr =
  15.                                 new BufferedReader(new InputStreamReader(System.in));
  16.                         String line = null;
  17.                         while((line=bufr.readLine())!=null)
  18.                         {
  19.                                 if("886".equals(line))
  20.                                         break;
  21.                                 byte[] buf = line.getBytes();
  22.                                 DatagramPacket dp =
  23.                                         new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10001);
  24.                                                                                                                                     //经过一位同学的提示把地址改成本地回路地址:127.0.0.1后就成了一行输出了,但还是不知道为什么?
  25.                                 ds.send(dp);
  26.                         }
  27.                 }
  28.                 catch (Exception e)
  29.                 {
  30.                         throw new RuntimeException("发送失败");
  31.                 }
  32.         
  33.         }
  34. }

  35. class Rece2 implements Runnable
  36. {
  37.         private DatagramSocket ds;
  38.         public Rece2(DatagramSocket ds)
  39.         {
  40.                 this.ds = ds;
  41.         }
  42.     public void run()
  43.         {
  44.                 try
  45.                 {
  46.                         while(true)
  47.                         {
  48.                                 byte[] buf = new byte[1024];
  49.                                 DatagramPacket dp = new DatagramPacket(buf,buf.length);
  50.                                 ds.receive(dp);
  51.                                 String ip = dp.getAddress().getHostAddress();
  52.                                 String data = new String(dp.getData(),0,dp.getLength());
  53.                                 System.out.println(ip+" : "+data);
  54.                         }
  55.         
  56.                 }
  57.                 catch (Exception e)
  58.                 {
  59.                         throw new RuntimeException("接收失败");
  60.                 }
  61.                
  62.         }
  63. }

  64. class UdpSendRece2
  65. {
  66.         public static void main(String[] args)throws Exception
  67.         {
  68.                 DatagramSocket sendDs = new DatagramSocket();
  69.                 DatagramSocket receDs = new DatagramSocket(10001);
  70.                 new Thread(new Send2(sendDs)).start();
  71.                 new Thread(new Rece2(receDs)).start();
  72.         }
  73. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
自己顶。。。。。。。。。。。。。
回复 使用道具 举报
表示没有学网络编程呢,线程部分看好几遍了
回复 使用道具 举报
顶 ........
回复 使用道具 举报
我的贴子就这样沉下去啦。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
..........................................................
回复 使用道具 举报
IPv4的地址中,在每个网段中,有两个地址是比较特殊的,它们不能用作主机地址,一个是网络地址,一个广播地址,比如192.168.1.255就是广播地址,192.168.1.0这个是网络地址。如楼主那样把目的地址设置成192.168.1.255就意味着要往192.168.1.0这个网络下的所有主机发送广播数据包。因为您有两张网卡估计地址也是在192.168.1.0这个网络地址中,所以只要是在该网络中主机开启接收端,就会收到数据。因为您有两块网卡,自然就收两次哦。而127.0.0.1是本机回环地址,一般用于测试本机网卡是否正常工作的,数据包是不往外发送的。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
杨鹏 发表于 2012-5-8 17:56
IPv4的地址中,在每个网段中,有两个地址是比较特殊的,它们不能用作主机地址,一个是网络地址,一个广播地 ...

谢谢,我想的原因也就是两个网卡的原因,听您这么一说,我了解了
回复 使用道具 举报
顶哥们一个,但是,我还没有网络编程那部分呢。呵呵,还不能帮助你解决问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马