为什么我UDP包在内网发送不到公网IP上去?
如题~~
S端(UDP接收)在公网,开一个线程循环接收9001端口上的UDP包。
C端(UDP发送)在内网的时候,发送UDP包,S端总是接收不到,这是为啥?我在S端还开了个TCP的监听socket,TCP能连接成功的,就是UDP包发送过去后接收不到。sendto()返回的长度也是正常的。网络的问题?(在局域网的时候是能接收到的),还是对UDP要做什么参数设置?发送的代码:
- C/C++ code
sockaddr_in addr1; memset((char *) &addr1, 0, sizeof(addr1)); addr1.sin_family = AF_INET; addr1.sin_addr.s_addr = inet_addr(sip); addr1.sin_port = htons(9001); Message Msg; memset(&Msg,0,sizeof(Msg)); Msg.iType = 1; for(int i=0;i<20;i++) { int val = sendto(m_ClientSocket,(const char*)&Msg,sizeof(Msg), 0,(sockaddr *)&addr1, sizeof(addr1)); CString str; str.Format("%d",val); MessageBox(str); Sleep(500); } MessageBox("UDP包发送完毕");[解决办法]
用winshark截包看一下
有可能是你的C端发送SOCKET的公网地址或端口有问题
再一种可能是公网服务器端口没有对开放,可以通过UDP(SocketTool)工具测试,如果没问题就是你程序的问题
[解决办法]
是不是防火墙阻止了