WSAStartup(MAKEWORD(1,1),&wsaData); SOCKET m_UDPSocket = socket(AF_INET,SOCK_DGRAM,0); sockaddr_in sev;
sev.sin_family = AF_INET;
sev.sin_port = 137;    sev.sin_addr.S_un.S_un_b.s_b1 = 127;
    sev.sin_addr.S_un.S_un_b.s_b2 = 0;
sev.sin_addr.S_un.S_un_b.s_b3 = 0;
sev.sin_addr.S_un.S_un_b.s_b4 = 1; sev.sin_zero[0]=htons(0);; int rec = bind(m_UDPSocket,(sockaddr FAR*)&sev,sizeof(sockaddr_in));
    sendto(m_UDPSocket,(const char *)bs,50,0,(sockaddr FAR*)&sev,sizeof(sockaddr_in));
    
int size = sizeof(sockaddr_in);
int nchar = 0;
while(1)
{
nchar=recvfrom(m_UDPSocket,(char * )Buf,500,0,(sockaddr FAR*)&sev,&size);
if(nchar >= 0)
break; }为什么我的nchar为50呢?还是空的啊?

解决方案 »

  1.   

    sendto(m_UDPSocket,(const char *)bs,50,0,(sockaddr FAR*)&sev,sizeof(sockaddr_in));
    这儿是发了50吗
      

  2.   

    to yinzhaohui
    我是发了50个字节啊
      

  3.   

    recvfrom 返回你接受到的字节数
    sendto(m_UDPSocket,(const char *)bs,50,0,(sockaddr FAR*)&sev,sizeof(sockaddr_in));
    50 表示你发送了50个字节 
    bs 你在什么地方初始化的阿 看看你BS初始化 怎么做的
      

  4.   

    有数据呀!#include "stdafx.h"
    #include <winsock2.h>#pragma comment(lib,"ws2_32.lib")
    int main(int argc, char* argv[])
    {
    WSADATA wsaData;
        WSAStartup(MAKEWORD(1,1),&wsaData); SOCKET m_UDPSocket = socket(AF_INET,SOCK_DGRAM,0); sockaddr_in sev;
    sev.sin_family = AF_INET;
    sev.sin_port =5555;// 137;    sev.sin_addr.S_un.S_un_b.s_b1 = 127;
        sev.sin_addr.S_un.S_un_b.s_b2 = 0;
    sev.sin_addr.S_un.S_un_b.s_b3 = 0;
    sev.sin_addr.S_un.S_un_b.s_b4 = 1; sev.sin_zero[0]=htons(0);;
        
    char sendBuffer[50];
    strcpy(sendBuffer,"David Ripple!");
    int rec = bind(m_UDPSocket,(sockaddr FAR*)&sev,sizeof(sockaddr_in));
        int nSend=sendto(m_UDPSocket,(const char *)sendBuffer,50,0,(sockaddr FAR*)&sev,sizeof(sockaddr_in));
        printf("Have sent%d bytes\n",nSend); int size = sizeof(sockaddr_in);
    int nchar = 0;
    char Buf[500]; //::Sleep(2000);
    while(1)
    {
    printf("++++nChar=%d\n",nchar);
    nchar=recvfrom(m_UDPSocket,(char * )Buf,500,0,(sockaddr FAR*)&sev,&size);
        printf("----nChar=%d\n",nchar);
    if(nchar >= 0)
    break; }
    printf("nChar=%d\nBuffer Content:\n%s\n",nchar,Buf);
    return 0;
    }==================================================================
    Buffer Content:
    David Ripple
      

  5.   

    sendto(m_UDPSocket,(const char *)bs,50,0,(sockaddr FAR*)&sev,sizeof(sockaddr_in));
    这里只发送了50吧
      nchar=recvfrom(m_UDPSocket,(char * )Buf,500,0,(sockaddr FAR*)&sev,&size);这里的nchar是指接收到的数据长度,不是缓冲区长度
      

  6.   

    sendto(m_UDPSocket,(const char *)bs,sizeof(bs),0,(sockaddr FAR*)&sev,sizeof(sockaddr_in));
    nchar=recvfrom(m_UDPSocket,(char * )Buf,500,0,(sockaddr FAR*)&sev,&size);这里的nchar是指接收到的数据字节数目!