c - 如何检查 TCP 层上的套接字是否处于事件状态?

标签 c sockets tcp port tcpclient

typedef unsigned int uint16;
SOCKET s, new_socket;
uint16 port =18001;

    void CreateSocket()
    {
            WSADATA wsa;
            struct sockaddr_in server;  // creating a socket address structure: structure contains ip address and port number


                printf("Initializing Winsock\n");
            if(WSAStartup(MAKEWORD(2,2), &wsa)!=0)
            {
                printf("Failed Error Code: %d", WSAGetLastError());
                return -1;
            }
            printf("Initialised\n");


            //CREATING a SOCKET

            if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1)
            {
                printf("Could not Create Socket\n");
                //return 0;
            }
            printf("Socket Created\n");

            server.sin_addr.s_addr = inet_addr("192.168.0.1");
            server.sin_family = AF_INET;     
            server.sin_port = htons(port); 
//Binding between the socket and ip address

    if(bind (s, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR)
    {
        printf("Bind failed with error code: %d", WSAGetLastError());
    }
    puts("Bind Done");


    //Listen to incoming connections
    listen(s, 3);


    //Accepting the incoming connection
         new_socket = accept(s, NULL, NULL);

       if (new_socket == INVALID_SOCKET)
       {
    printf(L"accept failed with error: %ld\n", WSAGetLastError());
    closesocket(new_socket);
    WSACleanup();
    return 1;
} 
       else
    printf("Client connected.\n");

关闭套接字;

        }

int main()
{
CreateSocket();

return 0;
}

这是针对 TCP 的。 我通过上面的 IP 地址和端口号接收来自 MASTER 的连接,因此我为其创建了一个带有端口号和 IP 地址的套接字。但如何检查套接字是否处于事件状态?如何检查上述套接字代码是否有效(没有显示任何错误)。我在 MASTER 方面收到错误消息: 连接事件检查失败 (WSAGetLastError()) 有人可以帮我吗?

最佳答案

你的套接字和地址之间没有任何联系,你永远不会bind() server 中的地址到套接字s

这当然就是您的客户端无法连接的原因,因为套接字不会使用预期的端口。我假设您在其他地方调用 accept()依此类推,实际上使套接字也接受传入连接。

关于c - 如何检查 TCP 层上的套接字是否处于事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21023874/

相关文章:

c# - 同步多套接字客户端说明

tcp - 在 Windows 下的非阻塞 TCP 套接字上使用 SO_SNDBUF 的奇怪行为

c++ - 无法将 char[33] 转换为 LPCTSTR,或者如果我将类型转换为 LPCTSTR,则无法获得所需的结果

c - 在 C 中使用 FastCGI 访问 PUT 或 POST 请求的主体

c++ - 为什么UDP服务器上的UDP客户端端口会发生变化

python - 如何使用 Python 同时流式传输多个音频文件

java - Android套接字编程

c - 将一个文字定义为另一个文字的倍数会导致错误的结果

c - 在 C 中读取文件时跳过一行

java - 快速获取修改后的Java UTF(使用java writeUTF()方法创建)的前两个字节的内容长度