c - 使用 Windows 10 和 C (Visual Studio 2015) 进行套接字编程

标签 c windows sockets

我使用 Windows 10 和 C (visual studios 2015) 编写了套接字服务器代码,但我认为绑定(bind)或监听代码是错误的。

当我执行我的代码时,它不会等到客户端连接。打印出“winsock初始化成功”和“创建socket成功”后结束。

请帮帮我


#include <stdio.h>
#include <winsock2.h>

int main(int argc, char *argv[]) {

    WSADATA wsaData;

    struct sockaddr_in address_of_server;
    struct sockaddr_in address_of_client;

    int socket_of_client;
    int size_of_address_of_client = sizeof(address_of_client);

    if (WSAStartup(MAKEWORD(2, 2), &wsaData) == 0) {
        printf("winsock initialization success\n");
    }
    else {
        printf("winsock initialization failure\n");
    }

    SOCKET socket_of_server = socket(AF_INET, SOCK_STREAM, 0);

    if (socket_of_server == -1) {
        printf("creating socket failure\n");
    }
    else {
        printf("creating socket success\n");
    }

    memset(&address_of_server, 0, sizeof(address_of_server));
    address_of_server.sin_family = AF_INET;
    address_of_server.sin_addr.s_addr = htonl(INADDR_ANY);
    address_of_server.sin_port = htons(atoi(10000));

    bind(socket_of_server, (struct sockaddr*)&address_of_server, sizeof(address_of_server));

    listen(socket_of_server, 5);

    socket_of_client = accept(socket_of_server, (struct sockaddr*)&address_of_client, &size_of_address_of_client);

    WSACleanup();

}

最佳答案

在 listen() 之后你需要调用 accept() 来获得一个新的连接套接字。 listen() 只是开始监听,并不等待任何客户端连接。

关于c - 使用 Windows 10 和 C (Visual Studio 2015) 进行套接字编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50607736/

相关文章:

java - 通过 TCP 发送两种不同类型的数组

c++ - 这个小型数据/命令广播应用程序的建议网络拓扑?

c - 不包括 <stdio.h>

c++ - 在 C/C++ 中管理分层数据

c - 理解 c 定义宏?

python - pip - 无法找到 vcvarsall.bat

c++ - 使用 __debugbreak 在 GoogleTest 中捕获自定义断言

c - MPI vector 乘法

c++ - 处理 Win 7 应用程序中的限制

c++ - C/C++ 中的 Read() - 关于读取内容与缓冲区大小