【100分】Java UDP通信获取到的端口号的问题
http://hnzhoujunmei.iteye.com/blog/784399就跟这个例子中描述的一样。 我写的端口号1111 。为啥接收到的时候不是1111 呢?
package udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
//可以使用双份该程序测试udp套接字
public class UDP0 {
public static void main(String[] args) throws IOException {
byte[] arr = new byte[128];
DatagramPacket p = new DatagramPacket(arr,128);
if(args[0].charAt(0) == 'r'){//read
DatagramSocket sock = new DatagramSocket(1111);
sock.receive(p);
String word = new String(p.getData());
System.out.println("From: "+p.getAddress()+" :Port"+p.getPort());//取出数据包中的地址和端口,执行结果端口号不一致
System.out.println(word);
sock.close();
}
else{//write
DatagramSocket sock = new DatagramSocket();
p.setAddress(InetAddress.getByName(args[1])); //地址端口封装在数据包中
p.setPort(1111); /// 我指定1111
sock.send(p);
sock.close();
}
}
}
不知道是不是端口号的问题啊。 我局域网发数据收不到。 跟远程主机发送。远程主机可以收到 --------------------编程问答-------------------- 不知道是不是端口号的问题啊。 我局域网发数据收不到。 跟远程主机发送。远程主机可以收到
------------------------------
猜测,UDP请求 被拦截了。 --------------------编程问答-------------------- 楼主先看API吧,每个函数的用途和功能,先了解清楚再说吧。
DatagramPacket.getPort() 返回的是远程主机的端口,不是本地端口。
套接字一般由4个部分组成,本地IP、本地端口、远程IIP、远程端口。
另外,发送代码中,没有看到设置数据的语句。 --------------------编程问答--------------------
场景是这样的。我在远程服务器上部署一段代码 NAT
客户端A (port:10245) 发送数据给 NAT 获取到client-A的远程端口 60.114.32.x?远程地址:31563?
客户端B ......................clent-B........................
然后client-B会收到 NAT返回的 client-A的地址 60.114.32.x 和端口 31563
接着我发送数据给A A就收不到了啊。。
Client-A Client-B和远程NAT之间收发数据正常。
Client-A Client-B是同一台终端。。。
哥们可不帮忙分析一下原因啊
--------------------编程问答-------------------- 2L讲的还是蛮清楚的。
服务端的端口是不一定和客户端一样的,p.setPort(1111);这个操作可能导致发送UDP失败,除非服务端的端口与客户端一致。 --------------------编程问答-------------------- 创建数据报套接字并将其绑定到本地主机上的指定端口上应该没错。
你按照api上的说法试着调用checkListen 方法试下看行不行
如果存在安全管理器,则首先使用 port 参数作为参数调用其 checkListen 方法,以确保允许该操作。这可能会导致 SecurityException 异常。--------------------编程问答-------------------- 3L 的过程在示例代码中没有展现出来,所以,不太明白LZ在干什么事情。
初一看,我以为是UDP打孔,后来一看,示例代码中没有相关的内容。
本地套接字的使用,要先向系统申请绑定操作的。
不太明白楼主的代码,是要多个进程绑定一个本地套接字,
还是一个进程使用一个套接字,既接收又发送数据。
网络编程,首先要明白套接字的概念,以及数据报文的概念,尤其是程序实现方面的理解而非理论知识。 --------------------编程问答-------------------- 如果传输消息,就涉及到两台主机。不妨C/S架构,先确定哪个是服务端、哪个是客户端,然后,再进行通信。
--------------------编程问答--------------------
帖子中的实例确实没相关内容只是说同一个问题就是 ip的端口号不一致。
我想搞android上的语音通话啊。 头都大了。 哥们可不可以留个站内的联系方式呀。
我把代码发给你,帮我看看呗
补充:Java , Java SE