ipv6套接字绑定异常,求大神.
ipv6套接字绑定错误,求大神......
编译没问题,运行的时候进入到了套接字绑定错误处理的那部分代码了,求帮助啊
运行输出如下:
Bind socket failed.
Press any key to continue......
------解决方案--------------------
服务端要用 AI_PASSIVE
hints.ai_flags = AI_PASSIVE
- C/C++ code
#include<stdio.h> #include<winsock2.h> #include<ws2tcpip.h> //在编译采用了WINSOCK2.H的应用程序时,需要链接到WS2_32.LIB库 #pragma comment(lib, "WS2_32.LIB") int main(int argc, char* argv[]) { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1, 1); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { printf("WSAStartup failed.\n"); system("pause"); return -1; } if (LOBYTE(wsaData.wVersion) != 1|| HIBYTE(wsaData.wVersion) != 1) { WSACleanup(); printf("LOBYTE or HIBYTE failed.\n"); system("pause"); return -2; } //创建套接字// addrinfo hints; addrinfo *res; memset(&hints, 0, sizeof(hints)); hints.ai_family=AF_INET6; //hints.ai_family = PF_INET6; hints.ai_socktype = SOCK_DGRAM; hints.ai_protocol = IPPROTO_UDP; hints.ai_flags = AI_NUMERICHOST; getaddrinfo("fe80::706d:5cb0:fcac:7141", "7999", &hints, &res); //getaddrinfo(NULL, "8700", &hints, &res); SOCKET s; s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if(s == INVALID_SOCKET) { WSACleanup(); printf("Create socket failed.\n"); system("pause"); return -3; } //绑定套接口 err = bind(s, res->ai_addr, res->ai_addrlen); if(err == SOCKET_ERROR) { WSACleanup(); printf("Bind socket failed.\n"); system("pause"); return -4; } //发送消息 char buf[]="Hello, my name is zhcosin."; err = sendto(s, buf, strlen(buf), 0, res->ai_addr, res->ai_addrlen); if(err == SOCKET_ERROR) { WSACleanup(); printf("Send failed.\n"); system("pause"); return -5; } closesocket(s); system("pause"); }
编译没问题,运行的时候进入到了套接字绑定错误处理的那部分代码了,求帮助啊
运行输出如下:
Bind socket failed.
Press any key to continue......
------解决方案--------------------
服务端要用 AI_PASSIVE
hints.ai_flags = AI_PASSIVE