关于网友提出的“ upd通讯的怪问题,请高手指点”问题疑问,本网通过在网上对“ upd通讯的怪问题,请高手指点”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: upd通讯的怪问题,请高手指点
描述: 先看下面的一段代码
#include "stdafx.h"
#include
#include
#pragma comment(lib,"Ws2_32.lib")
int main(int argc, char* argv[])
{
WSADATA wd;
WSAStartup(0x0101,&wd);
SOCKET s;
s=socket(AF_INET,SOCK_DGRAM,0);
sockaddr_in si;
memset(&si,0,sizeof(si));
si.sin_addr.S_un.S_addr=INADDR_ANY;
si.sin_family=AF_INET;
si.sin_port=htons(atol(argv[1]));
if(bind(s,(sockaddr*)&si,sizeof(si))==SOCKET_ERROR)
{
printf("bind error:%d",WSAGetLastError());
return 0;
}
SOCKET s0;
s0=socket(AF_INET,SOCK_DGRAM,0);
char c[1000];
sockaddr_in csi;
int len;
while(1)
{
len=sizeof(csi);
if(recvfrom(s,c,1000,0,(sockaddr*)&csi,&len)!=SOCKET_ERROR)
{
printf("received: ip:%s,port:%d\n",inet_ntoa(csi.sin_addr),ntohs(csi.sin_port));
if(sendto(s0,c,1000,0,(sockaddr*)&csi,sizeof(csi))==SOCKET_ERROR)
{
printf("sendto error:%d",WSAGetLastError());
return 0;
}
}
else
{
printf("recv error:%d",WSAGetLastError());
return 0;
}
Sleep(500);
}
return 0;
}
我在公网上运行上面的程序,然后写一个相应的UDP客户端向服务器发包和收包,客户端没有公网IP,通过一个网关连接到INTERNET.但是服务器可以收到客户端发来的包,但服务器向客户端发包的时候客户端却收不到,如果把上面的sendto()函数的第一个参数换成s,则客户端就可以收到服务器发出的包,请高手指点是什么原因,如何解决,谢谢!
以上介绍了“ upd通讯的怪问题,请高手指点”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3224749.html