2 lungong19871114 lungong19871114 于 2015.07.27 11:46 提问

bind绑定失败,错误10049,不知道怎么改了

int main_s6()
{
// 创建套节字
DWORD dwThread_ms;
HANDLE h_thread;

char ip_temp[128] = {0}; 
char port_temp_i[32] = {0};
int port_temp_a = 0;
printf("Please input the ip address, Defaults is ::1\n->");
getchar();
gets_s(ip_temp);
if(strlen(ip_temp) == 0)
    strcpy_s(ip_temp, sizeof(ip_temp), ip_add6);
printf("\nPlease input the port number, Defaults is 50002\n->");
gets_s(port_temp_i);
if(strlen(port_temp_i) == 0)
    strcpy_s(port_temp_i, sizeof(port_temp_i), port_num6);
port_temp_a = atoi(port_temp_i);


SOCKET sListen = ::socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP);  
//用来指定套接字使用的地址格式,通常使用AF_INET  
//指定套接字的类型,若是SOCK_DGRAM,则用的是udp不可靠传输  
//配合type参数使用,指定使用的协议类型(当指定套接字类型后,可以设置为0,因为默认为UDP或TCP)  
if(sListen == INVALID_SOCKET)   
{   
    printf("Failed socket() \n");   
    return 0;   
}   

sockaddr_in6 sin6;   
//bzero(&sin6,sizeof(sin6));
sin6.sin6_family = PF_INET6;   
sin6.sin6_port = htons(port_temp_a);  //1024 ~ 49151:普通用户注册的端口号  
//sin6.sin6_addr = inet_ntop(ip_temp); 
sin6.sin6_addr = in6addr_any; 

inet_pton(PF_INET6,ip_temp,&sin6.sin6_addr); 

    printf("inet_pton: 0x%x\n", sin6.sin6_addr);

// 绑定这个套节字到一个本地地址   
    if(::bind(sListen, (LPSOCKADDR)&sin6, sizeof(sin6)) == SOCKET_ERROR)   
{   //printf("%d\n",sizeof(sin6));
    printf(" error:%d\n", WSAGetLastError());
    printf("Failed bind() \n");   
    return 0;   
}   

// 进入监听模式   
//2指的是,监听队列中允许保持的尚未处理的最大连接数  

if(::listen(sListen, 2) == SOCKET_ERROR)   
{   
    printf("Failed listen() \n");   
    return 0;   
}   
// 循环接受客户的连接请求   
sockaddr_in6 remoteAddr;    
int nAddrLen = sizeof(remoteAddr);  

//SOCKET sClient = 0;   

printf("waiting for client...\n");
while(sClient == 0)   
{   
    // 接受一个新连接   
    //((SOCKADDR*)&remoteAddr)一个指向sockaddr_in结构的指针,用于获取对方地址  
    sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);   
    if(sClient == INVALID_SOCKET)   
    {   
        printf("Failed accept()");   
    }   
    printf("link successfully\nclient's IP:%s \r\n", inet_ntop(AF_INET6,&remoteAddr.sin6_addr,ip_temp,sizeof(ip_temp)));   
    continue;
} 
h_thread = CreateThread(NULL, 0, _m, NULL, 0, &dwThread_ms);
CloseHandle(h_thread);
recv_s();

// 关闭同客户端的连接   
::closesocket(sClient);   
// 关闭监听套节字   
::closesocket(sListen);   

return FALSE;   

}

1个回答

oyljerry
oyljerry   Ds   Rxr 2015.07.27 11:58
 ErrorCode 10049
在其上下文中,该请求的地址无效。

你打印一下你绑定的地址具体是什么,这个需要为你本地地址。而不是可以随便输入一个地址

lungong19871114
lungong19871114 是我本地的ipv6的地址
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片