Winsock错误10061/10060:远程服务器连接失败求助
Windows Socket远程连接失败排查求助
之前尝试过相关问题的解决方案但无法解决问题,现再次提问寻求新思路。我在实现Windows Socket编程时,Socket创建成功,且能正常连接localhost,但连接远程服务器(如www.google.com、公司主机)时,会出现Winsock错误10061或10060。已确认防火墙处于关闭状态,以下是我的代码、监听端口信息及测试输出:
代码实现
/* Socket Programming on Windows Machine Author : Raza Javed Date : 11-10-2022 */ #include<stdio.h> #include<winsock2.h> #include<string.h> int main(int argc, char *argv[]) { // Winsock Initialization WSADATA wsa; // WSADATA是存储Winsock库信息的结构体 SOCKET s; struct sockaddr_in server; struct in_addr **addr_list; struct hostent *he; char *hostname = "localhost"; char ip[100]; printf("Initializing Winsock..."); if (WSAStartup(MAKEWORD(2,2),&wsa)!=0) { printf("Failed. Error Code : %d", WSAGetLastError()); //WSAGetLastError用于获取错误详情 return 1; } printf("Initialized.\n"); // Socket创建 if((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { printf("Could not create the socket: %d", WSAGetLastError()); } printf("Socket Created.\n"); // 使用gethostbyname获取IP if ((he = gethostbyname(hostname)) == NULL) { printf("gethostbyname failed : %d", WSAGetLastError()); return 1; } addr_list = (struct in_addr **)he->h_addr_list; // 将h_addr_list转换为in_addr类型 for(int i = 0; addr_list[i] != NULL; i++) { strcpy(ip, inet_ntoa(*addr_list[i])); } printf("%s resolved to %s\n", hostname, ip); // 连接服务器 //memset(&server, "\0", sizeof(server)); server.sin_addr.s_addr = inet_addr(ip); server.sin_family = AF_INET; server.sin_port = htons(49835); if (connect(s, (struct sockaddr *)&server, sizeof(server)) < 0) { printf("connect error : %d", WSAGetLastError()); getchar(); return 1; } puts("connected"); getchar(); // 保持终端窗口不关闭 return 0; }
监听端口信息
TCP 127.0.0.1:49835 0.0.0.0:0 LISTENING
本地连接输出
Initializing Winsock...Initialized. Socket Created. localhost resolved to 127.0.0.1 connected
修改为远程服务器后的输出(以www.google.com为例)
Initializing Winsock...Initialized. Socket Created. www.google.com resolved to 142.251.209.132 connect error : 10060
恳请各位帮忙排查问题,我完全找不到原因。
内容的提问来源于stack exchange,提问作者Raza Javed
相关产品推荐
相关产品推荐

