黑马程序员技术交流社区
标题:
【已解决】关于Socket 发送数据时的绑定端口问题
[打印本页]
作者:
何拴绪
时间:
2012-5-23 09:24
标题:
【已解决】关于Socket 发送数据时的绑定端口问题
本帖最后由 何拴绪 于 2012-5-26 19:58 编辑
//发送端
class UDPSend
{
public static void main(String[] args) throws Exception
{
//创建udp服务。通过DatagramSocket对象
DatagramSocket ds = new DatagramSocket(9999);//指定端口号发送数据,若不指定系统随机分配。
//确定数据,并封装成数据包 DatagramPacket(byte[] buf,int length,SocketAddress address,int port)
byte[] buf = "udp data packet send ....".getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("localhost"),8888);
// 发送数据
ds.send(dp);
//关闭资源
ds.close();
}
}
复制代码
//接收端
class UDPReceive
{
public static void main(String[] args) throws Exception{
DatagramSocket ds = new DatagramSocket(8888);// 创建数据报套接字并将其绑定到本地主机上的指定端口。
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());//将获取的字节数组数据封装为字符串
int port = dp.getPort();//
System.out.println(ip+"-->"+data+"-->"+port);
}
}
}
复制代码
问题:发送端绑定的端口号和接收端的端口号为什么不能一样?(如果一样提示windows 端口错误)发送端的端口号和发送数据包时指定端口号为什么又不能是同一个端口?
作者:
刘聪
时间:
2012-5-23 16:31
问题一:
发送端绑定的端口号和接收端的端口号为什么不能一样?
答:可以一样。但你做实验时是在同一台机器上,因此会有端口冲突问题。
问题二:
发送端的端口号和发送数据包时指定端口号为什么又不能是同一个端口?
答:也可以是一个端口。问题的原因也是同上。这里要清楚发送端的端口号是我们自己的电脑的端口号,而数据包里的端口号使我们要发送的地址的那个主机的端口号,还是因为你是在自己发给自己(因此说白了,上面怎么出错了,这里也就怎么出错了)
关于UDP端口问题,就是“邮局”(DatagramSocket)、“信封”(DatagramPacket)、“信”(Data)的关系映射,希望楼主可以在这上面好好揣摩一下,应该很好理解的,come on!
作者:
何拴绪
时间:
2012-5-23 16:38
刘聪 发表于 2012-5-23 16:31
问题一:发送端绑定的端口号和接收端的端口号为什么不能一样?
答:可以一样。但你做实验时是在同一台机器 ...
知道了,果然是因为同一台机器的原因,3Q
作者:
刘聪
时间:
2012-5-23 16:49
you are welcome!O(∩_∩)O~
作者:
彩虹
时间:
2012-5-23 21:45
UDP是面向无连接的服务,本地机上有很多应用程序的端口号,你说的这种情况,我觉得很可能就是指定的端口号和某个应用程序的端口号发生了冲突
作者:
付左军
时间:
2012-5-23 22:22
向通信端口不一样怎么可以
作者:
程序猿
时间:
2012-5-23 22:32
同5楼,应该是端口号被占用了 换个端口号再试试
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2