黑马程序员技术交流社区
标题:
UDP传输协议的一个问题
[打印本页]
作者:
周素强
时间:
2012-5-7 15:57
标题:
UDP传输协议的一个问题
本帖最后由 周素强 于 2012-5-7 20:32 编辑
看视频老师讲的UDP协议写的简单聊天工具,自己也写了写 可是不知为什么发送没有问题,只是接收端为什么会出现两次,也就是说发送一行文字,而接收方显示出两行相同的文字,求解释?是不是因为连接外网的原因。
("192.168.1.255")//经过一位同学的提示把地址改成本地回路地址:127.0.0.1后就成了一行输出了,但还是不知道其中道理?
通过QQ群里的同学们一起探讨问题原因似乎找到了,因为我机子上有两个网卡,一个是无线的一个是机子上的有线的,我现在用的是无线的。问题好像是找到了 但是原理不是不清楚??
import java.io.*;
import java.net.*;
class Send2 implements Runnable
{
private DatagramSocket ds;
public Send2(DatagramSocket ds)
{
this.ds = ds;
}
public void run()
{
try
{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line=bufr.readLine())!=null)
{
if("886".equals(line))
break;
byte[] buf = line.getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10001);
//经过一位同学的提示把地址改成本地回路地址:127.0.0.1后就成了一行输出了,但还是不知道为什么?
ds.send(dp);
}
}
catch (Exception e)
{
throw new RuntimeException("发送失败");
}
}
}
class Rece2 implements Runnable
{
private DatagramSocket ds;
public Rece2(DatagramSocket ds)
{
this.ds = ds;
}
public void run()
{
try
{
while(true)
{
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+" : "+data);
}
}
catch (Exception e)
{
throw new RuntimeException("接收失败");
}
}
}
class UdpSendRece2
{
public static void main(String[] args)throws Exception
{
DatagramSocket sendDs = new DatagramSocket();
DatagramSocket receDs = new DatagramSocket(10001);
new Thread(new Send2(sendDs)).start();
new Thread(new Rece2(receDs)).start();
}
}
复制代码
作者:
周素强
时间:
2012-5-7 17:00
自己顶。。。。。。。。。。。。。
作者:
高云飞
时间:
2012-5-7 19:31
表示没有学网络编程呢,线程部分看好几遍了
作者:
飞舞❤心动
时间:
2012-5-7 19:31
顶 ........
作者:
周素强
时间:
2012-5-8 11:17
我的贴子就这样沉下去啦。。。。。。。。。。。。。。。。。。。
作者:
周素强
时间:
2012-5-8 17:08
..........................................................
作者:
杨鹏
时间:
2012-5-8 17:56
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是本机回环地址,一般用于测试本机网卡是否正常工作的,数据包是不往外发送的。
作者:
周素强
时间:
2012-5-8 18:04
杨鹏 发表于 2012-5-8 17:56
IPv4的地址中,在每个网段中,有两个地址是比较特殊的,它们不能用作主机地址,一个是网络地址,一个广播地 ...
谢谢,我想的原因也就是两个网卡的原因,听您这么一说,我了解了
作者:
HeiMaYSL
时间:
2012-5-9 16:32
顶哥们一个,但是,我还没有网络编程那部分呢。呵呵,还不能帮助你解决问题。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2