程序接收不到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;
}