本帖最后由 VisualEleven 于 2011-04-12 10:42:18 编辑

解决方案 »

  1.   

    什么意思这是我直接从以前的代码中截出来的,以前在linux下可以正常使用,现在到vc下就不行了
      

  2.   

    WSAGetLastError()的返回值看看是什么?
      

  3.   

    本帖最后由 VisualEleven 于 2011-04-12 11:38:42 编辑
      

  4.   

    网上查到错误 WSANOTINITIALISED 。。看不懂啊
      

  5.   

    加上了WSAStartup之后又返回10022了
      

  6.   

    An invalid argument was supplied. 得先connect,然后recv或send
      

  7.   

    本帖最后由 VisualEleven 于 2011-04-12 11:38:28 编辑
      

  8.   

    UDP的话,可以不用connect了,你bind()以后就可以直接recvfrom,如果是你第一次调用的是sendto的话,bind也可以不调用了。
      

  9.   

    我只调用了recvfrom
    bind()了之后就直接recvfrom还是提示10022
    都无语了现在
      

  10.   

    把这段代码写在一个线程里,多开一个线程。
    或者用select异步通信
      

  11.   

    看看人家写的,你函数用错了,不应该用recv吧:
    #include <stdio.h>
    #include "winsock2.h"void main() {  WSADATA wsaData;
      SOCKET RecvSocket;
      sockaddr_in RecvAddr;
      int Port = 27015;
      char RecvBuf[1024];
      int  BufLen = 1024;
      sockaddr_in SenderAddr;
      int SenderAddrSize = sizeof(SenderAddr);  //-----------------------------------------------
      // Initialize Winsock
      WSAStartup(MAKEWORD(2,2), &wsaData);  //-----------------------------------------------
      // Create a receiver socket to receive datagrams
      RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);  //-----------------------------------------------
      // Bind the socket to any address and the specified port.
      RecvAddr.sin_family = AF_INET;
      RecvAddr.sin_port = htons(Port);
      RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);  bind(RecvSocket, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr));  //-----------------------------------------------
      // Call the recvfrom function to receive datagrams
      // on the bound socket.
      printf("Receiving datagrams...\n");
      recvfrom(RecvSocket, 
        RecvBuf, 
        BufLen, 
        0, 
        (SOCKADDR *)&SenderAddr, 
        &SenderAddrSize);  //-----------------------------------------------
      // Close the socket when finished receiving datagrams
      printf("Finished receiving. Closing socket.\n");
      closesocket(RecvSocket);  //-----------------------------------------------
      // Clean up and exit.
      printf("Exiting.\n");
      WSACleanup();
      return;
    }
      

  12.   

    你想用UDP,但用的是TCP的函数
    MSDN:
    The recv function receives data from a connected socket or a bound connectionless socket.
    以下是TCP的例子,里面有代码:
    http://msdn.microsoft.com/en-us/library/ms740121(v=vs.85).aspx
      

  13.   

    udp也可以使用recv,只是不知道收到的消息的地址