首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WinSock2无法连接到简单服务器

WinSock2无法连接到简单服务器
EN

Stack Overflow用户
提问于 2022-11-20 14:21:37
回答 1查看 28关注 0票数 0

我正在使用C学习在windows上的联网,我得到了这个奇怪的10038错误

代码语言:javascript
运行
复制
WSADATA wsa;
SOCKET connect_socket;
printf("Initialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
    printf("Failed. Error Code : %d", WSAGetLastError());
    return 1;
}printf("Initialised.\n");

if (connect_socket = socket(AF_INET, SOCK_STREAM, 0) == INVALID_SOCKET) {
    printf("Could not create socket : %d\n", WSAGetLastError());
    return -1;
}
printf("Socket created.\n");
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(80);
server.sin_addr.s_addr = inet_addr("142.250.184.196");
if (connect(connect_socket, (struct sockaddr*)&server, sizeof(server)) != 0)
{
    printf("connect error : %d\n", WSAGetLastError());
    return 1;
}

printf("Connected\n");

return 0;

在尝试运行程序打印时,查找www.google.com -> "142.250.184.196“:”初始化Winsock...Initialised. Socket创建.连接错误: 10038“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-20 14:36:57

if (connect_socket = socket(AF_INET,SOCK_STREAM,0) == INVALID_SOCKET) {

基于运算符优先在C中,这意味着

代码语言:javascript
运行
复制
connect_socket = (socket(AF_INET, SOCK_STREAM, 0) == INVALID_SOCKET)

因此,connect_socket不是实际的套接字,而是检查套接字是否有效的结果。假设套接字创建有效,那么connect_socket将是假的,即0

由于0不是有效的TCP套接字,所以connect将在错误10038中失败。

黄种人 10038 非套接字上的套接字操作。尝试对不是套接字的东西进行操作。套接字句柄参数没有引用有效的套接字,或者对于select,fd_set的成员无效。

要解决这个问题,首先分配给connect_socket,然后与INVALID_SOCKET进行比较。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74508894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档