问题描述
我用php写一个客户端程序,目的是像服务器端发送一个udp包,当服务器端接收到我发送的udp包后,就像我udp包中数据段里指定的IP和端口连续发送udp包,由客户端接收并处理,我现在从客户端发送的udp包服务器端已经接收到了,但是我无法知道自己客户端所在机器的公网IP和端口,以至于无法从服务器端接收到其发送的udp包,客户端机器是通过路由上网的。在向服务器发送UDP包时,由路由做了IP和端口的转换。求解我该如何得到经过转换以后的公网IP和端口
我用php写一个客户端程序,目的是像服务器端发送一个udp包,当服务器端接收到我发送的udp包后,就像我udp包中数据段里指定的IP和端口连续发送udp包,由客户端接收并处理,我现在从客户端发送的udp包服务器端已经接收到了,但是我无法知道自己客户端所在机器的公网IP和端口,以至于无法从服务器端接收到其发送的udp包,客户端机器是通过路由上网的。在向服务器发送UDP包时,由路由做了IP和端口的转换。求解我该如何得到经过转换以后的公网IP和端口
客户端如何知道自己的公网IP和端口? 我的客户端有可能是在路由器后面访问公网的,在发送时路由会自动的做IP和端口的映射转换成公网的IP和端口,我现在需要这个转换完的公网IP和端口啊
通过服务器直接转发udp压力很大的,一般都打洞串联两个内网客户端。
你要知道的内网通过NAT转换成公网ip和端口,服务端负责接收后肯定知道的呀。
http://www.ip138.com/ips8.asp
然后正则匹配公网地址
但是端口就难说了,NAT是自动给你的的第一次udp请求随机设置个端口号,一段时间内缓存住。
如果你能控制udp服务器端代码的话,往返回包里加入公网ip+端口是比较稳妥的。
可惜我控制不了服务器端的代码啊 不过最近用笨办法起码能接受到服务器端发的UDP包了
不过又出了个新问题 因为服务器端是不断的往客户端发送UDP包的 但是发送间隔不一定,于是会产生2个问题:
1.我的PHP程序不断的接受服务器发送的UDP包,会不会造成客户机的不稳定,因为客户机是一个网站服务器,会导致其他访问问题不会。
2.接受到的服务器UDP包都会有重复,虽然用抓包工具看到重复的包的序号是不同的,但是包的数据段一样,这是什么原因,我是用while(recvfrom(socket...))来接受的,会是这里的原因么?
#2,这个应该和你的运行环境有关,多网卡?虚拟机下运行?
#2.我是在我自己电脑上测试的,当时应该是用的无线连的公网。 换到别的环境里就不会出现同一个包就收俩次的问题了?
有没有相关的详细点的资料可以看的? 谢谢
这样不用挂在apache下执行。第二个问题你不妨把代码放到别的机器测试下。看是不是网络环境的问题。
不过如何在php页面中调用我写的cli程序呢?第二个问题我回去用其他机器试试