请问如何实现一有UDP包到来就进行接受,谢谢~
同问可否在一个线程里面创建另外一个线程 !谢谢!

解决方案 »

  1.   

    一个简单的例子:
    客户端:
    SOCKET socket1; InitWinsock();
    struct sockaddr_in server;
    int len =sizeof(server);
    server.sin_family=AF_INET;
    server.sin_port=htons(1000);                      ///server的监听端口
    server.sin_addr.s_addr=inet_addr("192.168.1.101"); ///server的地址  socket1=socket(AF_INET,SOCK_DGRAM,0);
    while (1)
    { char buffer[1024]="\0";
    printf("input message\n");
    scanf("%s",buffer);
    if (strcmp(buffer,"bye")==0)
    break;
    if (sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)
    {
    if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,&len)!=SOCKET_ERROR)
    printf("rece from server:%s\n",buffer);
    }
    }
    closesocket(socket1);
    服务器端:
    SOCKET socket1; InitWinsock();
    struct sockaddr_in local;
    struct sockaddr_in from;
    int fromlen =sizeof(from);
    local.sin_family=AF_INET;
    local.sin_port=htons(1000);             ///监听端口
    local.sin_addr.s_addr=INADDR_ANY;       ///本机 socket1=socket(AF_INET,SOCK_DGRAM,0); bind(socket1,(struct sockaddr*)&local,sizeof local); while (1)
    {
    char buffer[1024]="\0";
    printf("waiting for message from others-------------\n");
    if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)
    {
    printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);
    ////给cilent发信息
    sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen); }
    Sleep(500);
    } closesocket(socket1);
    BOOL InitWinsock()
    {
    int Error;
    WORD VersionRequested;
    WSADATA WsaData;
    VersionRequested=MAKEWORD(2,2);
    Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2
    if(Error!=0)
    {
    return FALSE;
    }
    else
    {
    if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
    {
    WSACleanup();
    return FALSE;
    }

    }
    return TRUE;
      

  2.   

    谢谢~~~ recvfrom是不是一有数据到来就响应,如果没有数据到来是不是一直处于等待状态?期间
    其它线程是否可以处于活动状态。以前有过一次就是cpu一直处于百分百,不停的访问端口
      

  3.   

    没有数据recvfrom将阻塞到那里,通常将数据收发放在一个辅助线程里,否则可能出现你描述的cpu现象。期间其他线程如果启动了可以处于活动状态。
      

  4.   

    客户端的死循环中也可以sleep一下。