程序接收不到UDP数据包的问题,重分悬赏
服务端在win32平台广播数据包,客户端在linux上接受,目前的发现客户端死活收不到哪怕一个字节的数据,但我用TCPDUMP已经抓到了网络上的广播端口,用netstat -an命令也发现客户端程序已经在指定端口进行监听,可我的recv函数就是不返回,实在想不到什么问题,请大家看看我的代码吧,顶者有分...
int m_Socket;
struct sockaddr_in m_stSrcAddr;
int Init(char* strIP,int port,int nonB )
{
int argp = nonB;
int cbRet;
int nErrorCode;
m_Socket = socket(AF_INET,SOCK_DGRAM,0);
if(m_Socket<0)
{
printf("create socket error!\r\n");
return -1;
}
bzero(&m_stSrcAddr,sizeof(m_stSrcAddr));
m_stSrcAddr.sin_family = AF_INET;
m_stSrcAddr.sin_port = htons( port );
inet_aton(strIP,&m_stSrcAddr.sin_addr);
nErrorCode = bind( m_Socket,(struct sockaddr *)&m_stSrcAddr,sizeof(m_stSrcAddr));
printf("create socket error %s!\r\n",strerror(errno));
if(nErrorCode<0)
{
printf("create socket error %s!\r\n",strerror(errno));
return -1;
}
return 0;
}
void* ThreadEntry( void *ch );
int bThreadRun = 1;
int main(int argc, char* argv[])
{
int nPort = 0;
char cQuit = 0;
pthread_t ntid;
int nErr;
if(argc!=3)
return 0;
nPort = atoi(argv[2]);
if(Init(argv[1],nPort,0)!=0)
{
printf("create socket error!\r\n");
return -1;
}
char szBuf[50] = {0};
long lBufSize = 50;
long nRecved = 0;
SetDecoderInfo("/usr/ebc decode/linux/debug", 10);
while(bThreadRun)
{
printf("ready to recive data!\r\n");
nRecved = recv(m_Socket,szBuf, lBufSize,0);
printf("recive data!\r\n");
ProcessPackage(szBuf+4,nRecved-4);
memset(szBuf, 0, lBufSize);
nRecved = 0;
}
return 0;
}
void* ThreadEntry(void* lpParam)
{
char szBuf[2048] = {0};
long lBufSize = 2048;
long nRecved = 0;
SetDecoderInfo("/usr/ebc decode/linux/debug", 10);
while(bThreadRun)
{
nRecved = recv(m_Socket,szBuf, lBufSize,0);
printf("recive data!\r\n");
ProcessPackage(szBuf+4,nRecved-4);
memset(szBuf, 0, lBufSize);
nRecved = 0;
}
return (void*)0;
}
int m_Socket;
struct sockaddr_in m_stSrcAddr;
int Init(char* strIP,int port,int nonB )
{
int argp = nonB;
int cbRet;
int nErrorCode;
m_Socket = socket(AF_INET,SOCK_DGRAM,0);
if(m_Socket<0)
{
printf("create socket error!\r\n");
return -1;
}
bzero(&m_stSrcAddr,sizeof(m_stSrcAddr));
m_stSrcAddr.sin_family = AF_INET;
m_stSrcAddr.sin_port = htons( port );
inet_aton(strIP,&m_stSrcAddr.sin_addr);
nErrorCode = bind( m_Socket,(struct sockaddr *)&m_stSrcAddr,sizeof(m_stSrcAddr));
printf("create socket error %s!\r\n",strerror(errno));
if(nErrorCode<0)
{
printf("create socket error %s!\r\n",strerror(errno));
return -1;
}
return 0;
}
void* ThreadEntry( void *ch );
int bThreadRun = 1;
int main(int argc, char* argv[])
{
int nPort = 0;
char cQuit = 0;
pthread_t ntid;
int nErr;
if(argc!=3)
return 0;
nPort = atoi(argv[2]);
if(Init(argv[1],nPort,0)!=0)
{
printf("create socket error!\r\n");
return -1;
}
char szBuf[50] = {0};
long lBufSize = 50;
long nRecved = 0;
SetDecoderInfo("/usr/ebc decode/linux/debug", 10);
while(bThreadRun)
{
printf("ready to recive data!\r\n");
nRecved = recv(m_Socket,szBuf, lBufSize,0);
printf("recive data!\r\n");
ProcessPackage(szBuf+4,nRecved-4);
memset(szBuf, 0, lBufSize);
nRecved = 0;
}
return 0;
}
void* ThreadEntry(void* lpParam)
{
char szBuf[2048] = {0};
long lBufSize = 2048;
long nRecved = 0;
SetDecoderInfo("/usr/ebc decode/linux/debug", 10);
while(bThreadRun)
{
nRecved = recv(m_Socket,szBuf, lBufSize,0);
printf("recive data!\r\n");
ProcessPackage(szBuf+4,nRecved-4);
memset(szBuf, 0, lBufSize);
nRecved = 0;
}
return (void*)0;
}
...全文
相关推荐
利用MATLAB实时接收UDP数据包
利用MATLAB建立ARP连接,轮询等待,实时接收、解析UDP数据包
UDP数据包解析解析UDP数据包
UDP数据包解析解析UDP数据包,可以用C#实现UDP数据包的解析
UDP数据包接收(客户端)
本代码详细解释了UDP数据包接收、创建过程,运行过程中,需要与另外一台电脑处在同一个网段中,形成一个服务器-客户端模式进行通信
利用MATLAB实时接收UDP数据包(ARP连接).zip
利用MATLAB编程实时接收UDP数据包并且(建立ARP连接) 实时的接收和解析UDP数据包
侦听任意UDP端口来的数据包然后转发的程序源码
这个程序的功能类似于代理,起因是要接收UDP数据包,但不知道端口号,所以就写了这个可以侦听指定范围内所有端口的小程序。 另附测试用的数据包发送器和接收器。



