公网服务器(固定IP)没法发UDP数据给客户端
公网服务器(固定IP)无法发UDP数据给客户端?
用MFC写了个服务端程序,之前在局域网测试程序的时候,tcp和udp数据收发没有任何问题,可是将程序放在租用的vps主机上的时候,tcp数据收发没有问题,udp收发不到数据。直接用调试工具来进行数据收发,问题依旧,由于用的是windows 2003操作系统,找到本地策略,取消了udp指派任务,这时服务端能收到客户端发来的udp数据,但是却始终给客户端发送不成功,这里客户端的IP是根据客户端给服务端发送数据后,服务端获取的客户端的公网IP,端口双方事先约定好的,请高手指点迷津!
------最佳解决方案--------------------
lz可以这样,
假如客户端在私网内,IP:PORT = 192.168.0.2:55555
在路由器上设置一下端口映射 192.168.0.2:55555,
路由器可以自动做NAT转换,
会自动将客户端公网IP绑定到内网的端口,,,,,
------其他解决方案--------------------
你必须确保客户端首先发UDP报文给你公网服务器,且周期性继续发,从而保证网关给你开辟的临时通道畅通,从服务器首先发起的通讯总会遇到你这样问题的
------其他解决方案--------------------
你不做端口映射是很难保证通讯的成功的。你最好调整你程序的策略吧。客户端收发数据都要求由客户端主动到服务端交换数据。
------其他解决方案--------------------
需要在客户端用的路由器里面添加一个端口映射的条目.
TPLINK 几十块钱的就有这功能.打开管理页一看就知道
------其他解决方案--------------------
端口映射后客户端的端口号会不会改变?
------其他解决方案--------------------
QQ的公有终端跟私有终端在你登陆时就发给了服务器了
------其他解决方案--------------------
不明白就算了。
------其他解决方案--------------------
假设:
你客户端的内网私网IP:PORT = 192.168.0.2:55555
客户端的公网IP = 123.123.123.123,
做好端口映射后,路由器会自动绑定,123.123.123.123:55555,
路由器可以自动做NAT转换,,,,,
------其他解决方案--------------------
看样子大伙的一致看法是都是客户端的公网和私网的端口映射问题,我也认同这一说法,但是有一点我不太明白,很多聊天软件比如说QQ,用的就是UDP传输,尤其是在视频或语音聊天的时候,那为什么它就不用做什么端口映射?不要说人家是腾讯,技术多牛逼之类的话,我只知道,它没改变我的路由器配置
------其他解决方案--------------------
lz应该问你浏览http网页的时候为什么路由器没有做端口映射?
QQ CLIENT有个固定的登录SERVER IP,
CLIENT登录时会把自己的公网IP发给SERVER,
QQ的C/S架构基本上自己实现了OSI模型的TCP/IP之上应用层的一些协议,
这个HTTP这一层是相等的,
所以不需要路由器做端口映射,
但是lz的TCP/UDP这一层就需要lz自己实现一些协议细节了,,,,,
------其他解决方案--------------------
renxu350说的好像有点道理,有没有不用端口映射简单修改程序就可以实现公网和私网的UDP通信?
------其他解决方案--------------------
TCP可以,
UDP是不基于连接的,
UDP可以在私网内通过广播获取对方的IP,
但在公网似乎不太现实,
如果有高人能实现UDP公网这样通信,
那就能高人来实现吧,,,,,
------其他解决方案--------------------
其实我这个也需要注册,在客户端通过tcp登录我的服务器之后,服务器已经知道了该客户端的公网IP,端口按事先约定好的,可是数据传输是单向的,应该还是端口映射的问题
------其他解决方案--------------------
用MFC写了个服务端程序,之前在局域网测试程序的时候,tcp和udp数据收发没有任何问题,可是将程序放在租用的vps主机上的时候,tcp数据收发没有问题,udp收发不到数据。直接用调试工具来进行数据收发,问题依旧,由于用的是windows 2003操作系统,找到本地策略,取消了udp指派任务,这时服务端能收到客户端发来的udp数据,但是却始终给客户端发送不成功,这里客户端的IP是根据客户端给服务端发送数据后,服务端获取的客户端的公网IP,端口双方事先约定好的,请高手指点迷津!
------最佳解决方案--------------------
lz可以这样,
假如客户端在私网内,IP:PORT = 192.168.0.2:55555
在路由器上设置一下端口映射 192.168.0.2:55555,
路由器可以自动做NAT转换,
会自动将客户端公网IP绑定到内网的端口,,,,,
------其他解决方案--------------------
你必须确保客户端首先发UDP报文给你公网服务器,且周期性继续发,从而保证网关给你开辟的临时通道畅通,从服务器首先发起的通讯总会遇到你这样问题的
------其他解决方案--------------------
你不做端口映射是很难保证通讯的成功的。你最好调整你程序的策略吧。客户端收发数据都要求由客户端主动到服务端交换数据。
------其他解决方案--------------------
需要在客户端用的路由器里面添加一个端口映射的条目.
TPLINK 几十块钱的就有这功能.打开管理页一看就知道
------其他解决方案--------------------
端口映射后客户端的端口号会不会改变?
------其他解决方案--------------------
QQ的公有终端跟私有终端在你登陆时就发给了服务器了
------其他解决方案--------------------
不明白就算了。
------其他解决方案--------------------
假设:
你客户端的内网私网IP:PORT = 192.168.0.2:55555
客户端的公网IP = 123.123.123.123,
做好端口映射后,路由器会自动绑定,123.123.123.123:55555,
路由器可以自动做NAT转换,,,,,
------其他解决方案--------------------
看样子大伙的一致看法是都是客户端的公网和私网的端口映射问题,我也认同这一说法,但是有一点我不太明白,很多聊天软件比如说QQ,用的就是UDP传输,尤其是在视频或语音聊天的时候,那为什么它就不用做什么端口映射?不要说人家是腾讯,技术多牛逼之类的话,我只知道,它没改变我的路由器配置
------其他解决方案--------------------
lz应该问你浏览http网页的时候为什么路由器没有做端口映射?
QQ CLIENT有个固定的登录SERVER IP,
CLIENT登录时会把自己的公网IP发给SERVER,
QQ的C/S架构基本上自己实现了OSI模型的TCP/IP之上应用层的一些协议,
这个HTTP这一层是相等的,
所以不需要路由器做端口映射,
但是lz的TCP/UDP这一层就需要lz自己实现一些协议细节了,,,,,
------其他解决方案--------------------
renxu350说的好像有点道理,有没有不用端口映射简单修改程序就可以实现公网和私网的UDP通信?
------其他解决方案--------------------
TCP可以,
UDP是不基于连接的,
UDP可以在私网内通过广播获取对方的IP,
但在公网似乎不太现实,
如果有高人能实现UDP公网这样通信,
那就能高人来实现吧,,,,,
------其他解决方案--------------------
其实我这个也需要注册,在客户端通过tcp登录我的服务器之后,服务器已经知道了该客户端的公网IP,端口按事先约定好的,可是数据传输是单向的,应该还是端口映射的问题
------其他解决方案--------------------