客户端发送数据,而服务器端无数据到达,不知下面的代码错在哪?!
服务器端:接收数据*******************
void CGetUdpDataDlg::OnOk() 
{
  m_socketS=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  if(INVALID_SOCKET==m_socketS)
  {
  MessageBox("服务器端的套接字创建失败!");
  return FALSE;
  }
  sockaddr_in addrsock;
  addrsock.sin_family=AF_INET;
  addrsock.sin_port=(WORD)htons(6543);
addrsock.sin_addr.s_addr = inet_addr("10.130.6.14");
  int retval=bind(m_socketS, (SOCKADDR*)&addrsock, sizeof(SOCKADDR));
  if(SOCKET_ERROR==retval)
  {
  closesocket(m_socketS);
  MessageBox("服务器端的绑定套接字失败!");
  return FALSE;
  }
 
   struct sockaddr_in clientAddr;
  int lengthOfClient = sizeof(struct sockaddr_in);
  int noOfBytes;
  char message[MAX_LENGTH];
  while (1)
  {
    int length = lengthOfClient;
    int lengthOfMessage = 0;
    noOfBytes = recvfrom(m_socketS, message, MAX_LENGTH, 0,(struct sockaddr *) &clientAddr, &length);
  MessageBox("get data");
    sendto(m_socketS, message, lengthOfMessage, 0, (struct sockaddr *) &clientAddr, length);
  }
  return TRUE;
 }
客户端:发送数据*************************************
void CSendUDPPackageDlg::OnButtonConnect() 
{
m_socketC=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 
  if(INVALID_SOCKET==m_socketC)
  {
  MessageBox("客户端的套接字创建失败!");
  return ;
  }
   sockaddr_in addrsock;
  addrsock.sin_family=AF_INET;
  addrsock.sin_port=(WORD)htons(6001);
addrsock.sin_addr.s_addr = inet_addr("10.130.6.14");
  int retval=bind(m_socketC, (SOCKADDR*)&addrsock, sizeof(SOCKADDR));
  if(SOCKET_ERROR==retval)
  {
  closesocket(m_socketC);
  MessageBox("客户端的绑定套接字失败!");
  return ;
  }
sockaddr_in serverAddr;
  serverAddr.sin_family=AF_INET;
  serverAddr.sin_port=(WORD)htons(6543);
serverAddr.sin_addr.s_addr = inet_addr("10.130.6.14");
char message[MAX_LENGTH];
strcpy(message,"1234567890-1234567890-1234567890-1234567890");
int length=0;
while (1)

retval=sendto(m_socketC, message, strlen(message), 0,(struct sockaddr *) &serverAddr, length);
if(retval==SOCKET_ERROR)
{
retval=WSAGetLastError();
return;
}
retval=recvfrom(m_socketC, message, MAX_LENGTH, 0, NULL, NULL); 
//进行数据处理
}
}

解决方案 »

  1.   

    服务器端:接收数据*******************
    struct sockaddr_in clientAddr;
        noOfBytes = recvfrom(m_socketS, message, MAX_LENGTH, 0,(struct sockaddr *) &clientAddr, &length);
    clientAddr 没有添内容,应该添CLIENT的地址和端口
      

  2.   

    谢谢BBirdlyh(BBird)的回贴,但服务器端事先是无法知道客户端的地址呀?再说服务器端先运行recvfrom(..)后处于阻塞状态,等待客户端发送数据!
      

  3.   

    客户端发送数据时出错,
    if(retval==SOCKET_ERROR)
    {  
       retval=WSAGetLastError();
       return;
    }
    WSAGetLastError()得到的错误代码是10014,查MSDN知为Bad address,但我的机器的ip地址没错,查看sockaddr_in类型的变量的内容,4个字节的内容正确!
      

  4.   

    谢谢BBirdlyh(BBird)的回贴,但服务器端尚未运行到
    sendto(m_socketS, message, lengthOfMessage, 0, (struct sockaddr *) &clientAddr, length);
      

  5.   

    服务器端因为收不到消息,会停在noOfBytes = recvfrom(m_socketS, message, MAX_LENGTH, 0,(struct sockaddr *) 这个语句上