普通网友 2015-07-27 03:46 采纳率: 20%
浏览 2511

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 2015-07-27 03:58
    关注
     ErrorCode 10049
    在其上下文中,该请求的地址无效。
    

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

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!