64,683
社区成员
发帖
与我相关
我的任务
分享
void *udpLoggerFunction(void * args)
{
int recv;
SOCKADDR_IN addrSend;
int len = sizeof(SOCKADDR_IN);
SOCKET RecvSocket; //for receiving
struct sockaddr_in RecvAddr;
//win-socket configuration, for socket
InitWinsock();
RecvSocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); //for receiving
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(7778);
RecvAddr.sin_addr.S_un.S_addr =htonl(INADDR_ANY);
//设置为非阻塞
//unsigned long iMode = 1;//为0时阻塞,非0时不阻塞
//::ioctlsocket(RecvSocket,FIONBIO,&iMode);
int err = bind(RecvSocket,(LPSOCKADDR)&RecvAddr,sizeof(SOCKADDR_IN));
if (err == SOCKET_ERROR)
{
printf("Bind failed:%d\n", WSAGetLastError());
closesocket(RecvSocket);
WSACleanup();
return NULL;
}
char recvBuf[128];
while(1)
{
pthread_mutex_lock(&mut);
recv = recvfrom(RecvSocket,recvBuf,128,0,(LPSOCKADDR)&addrSend,&len);
if (recv <= 0)
{
printf("[%d]Recvfrom failed:%d\n", recv, WSAGetLastError());
pthread_mutex_unlock(&mut);
continue;
}
log.msgcount++;
printf("\nRecvied message successfully: %s",getNowTime());
pthread_mutex_unlock(&mut);
Sleep(1000);
}
closesocket(RecvSocket);
return NULL;
}
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, Port);
newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
newsock.Bind(ipep);
//Console.WriteLine("Waiting for a client...");
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
Remote = (EndPoint)(sender);
//接受数据报代码
recv = newsock.ReceiveFrom(data, ref Remote);
string s = Encoding.ASCII.GetString(data, 0, recv);
recv = recvfrom(RecvSocket,recvBuf,128,0,(LPSOCKADDR)&addrSend,&len);
, 应该就是阻塞了,但是发送端确实有发送啊... 而且C#的代码应该也是阻塞方式的。。。
RecvAddr.sin_addr.s_addr=inet_addr("XXX");