下面代码是发送请求到局域网内其他电脑的137端口,获得该电脑的主机信息.不知道,请求peticion中的这些16进制是什么意思.有没有 高手解决下                                                                                                                         SOCKET sock;
struct sockaddr_in origen,dest;
char respuesta[1000];
unsigned int addr=0; 
                      
char peticion[]="\x80\x94\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x20\x43\x4b\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x00\x00\x21\x00\x01"; WSADATA wsaData; if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0)
{
return -1;   
} if((sock = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET)     //UDP
{
return -1;   
}

if(setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout))==SOCKET_ERROR)
AfxMessageBox("Error al establecer 1?opcion");            //设置接收超时

memset(&dest,0,sizeof(dest));        struct hostent * phost;              //hostent gethostbyname返回的结构体
         phost=gethostbyname(dip);
        if (!phost)
addr=inet_addr(dip); if (!phost  && addr==INADDR_NONE) 
{
return -1;   
} if (phost != NULL)
memcpy(&(dest.sin_addr),phost->h_addr,phost->h_length);
else   
dest.sin_addr.s_addr = addr;
    
dest.sin_family = AF_INET;             
dest.sin_port = htons(137);                // //本程序作为发送端 NetBIOS名称服务
if (sendto (sock, peticion, sizeof(peticion)-1, 0, (struct sockaddr *)&dest, sizeof (dest)) < 0) 
{
return -1;
        }

解决方案 »

  1.   

    自己解决了...
    序号      字段名      长度
    1      Transaction ID      两字节(16位)
    2      Flags      两字节(16位)
    3      Questions      两字节(16位)
    4      AnswerRRs      两字节(16位)
    5      AuthorityRRs      两字节(16位)
    6      AdditionalRRs      两字节(16位)
    7      Name<Workstation/Redirector>      34字节(272位)
    8      Type:NBSTAT      两字节(16位)
    9      Class:INET      两字节(16位)