我做了一个udp协议的发送端,一个接收端,但是不能通讯,我跟踪的结果是发送端正常,接收端出现10014错误,请问10014是个什么错误啊,如何解决啊?如果分数不够我还可以再加100分

解决方案 »

  1.   

    sckInvalidArgument          10014     所请求的地址是广播地址,但未设置标记
      

  2.   

    mct10255:
    出现这个错误的原因是什么?
      

  3.   

    10014  bad address,
    是那个地址错了呢?
    本地的监听地址,还是预备接收发送端地址的SOCKADDR_IN sender 错了呢?
      

  4.   

    WSAEFAULT                          (10014)             Bad address. 系统检测到调用试图使用的一个指针参数指向的是一个非法指针地址。如果应用程序传递一个非法的指针值,或缓冲区长度太小,此错误发生。例如,参数为结构sockaddr,但参数的长度小于sizeof(struct sockaddr)。
      

  5.   

    SOCKADDR_IN sender;
    int dwSenderSize;ret = recvfrom(s, recvbuf,dwLength, 0, (SOCKADDR *)&sender, &dwSenderSize);
    其中sender,dwSenderSize没有初始化,他们的作用是传递一个地址,recvfrom函数负责写这两个变量。他们不会非法吧?
      

  6.   

    加一句
    dwSenderSize=sizeof(SOCKADDR_IN);
    试试
      

  7.   

    mct1025:
    我把代码贴出来你帮忙查一查好么?
    接收端
    void CTestreceiveDlg::OnButtonReceive() 
    {
      WSADATA wsd;
      SOCKET s;
      char * recvbuf =NULL;
      int ret;
      int dwSenderSize;
      SOCKADDR_IN sender;
      SOCKADDR_IN local;  dwSenderSize=sizeof(SOCKADDR_IN);  WSAStartup(MAKEWORD(2, 2),&wsd);
      s = socket(AF_INET, SOCK_DGRAM, 0);  local.sin_family = AF_INET;
      local.sin_port = htons(5550);
      local.sin_addr.s_addr = inet_addr("211.155.14.176");  bind(s,(SOCKADDR *)&local, sizeof(local));  while (1)
      {
    ret = recvfrom(s, recvbuf, 64, 0, (SOCKADDR *)&sender, &dwSenderSize);
       }

    }发送端
    void CTestsendDlg::OnButtonSend() 
    {
      WSADATA wsd;
      SOCKET s;
      char* sendbuf = NULL;
      int ret;
      SOCKADDR_IN local;
      char cChar = 'a';
     
      WSAStartup(MAKEWORD(2, 2), &wsd);
      s = socket(AF_INET, SOCK_DGRAM, 0);

      local.sin_family = AF_INET;
      local.sin_port = htons(5550);
      local.sin_addr.s_addr = inet_addr("211.155.14.178");  sendbuf="dddddddddddddddddddddddd";
      while (1)
        ret = sendto(s, sendbuf, 64, 0, (SOCKADDR *)&local, sizeof(local));  closesocket(s);
      WSACleanup();}
      

  8.   

    server端,你定义 char * recvbuf =NULL;后
    没有赋值
    加入recvbuf = new char[100];最后delete []recvbuf;
      

  9.   

    mct1025(macuntao):
    哥们谢谢你了,现在可以了。
    我看的例子是windows网络编程上的,我以为这就是权威,可能是我看的有问题。呵呵谢谢。
    交个朋友oicq 1647463。