【问题标题】:how to check that socket is active on TCP layer?如何检查套接字在 TCP 层上是否处于活动状态?
【发布时间】:2014-01-28 05:16:05
【问题描述】:
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()) 有人可以帮我吗??

【问题讨论】:

    标签: c sockets tcp port tcpclient


    【解决方案1】:

    你的socket和地址没有联系,你从来没有bind()server中的地址到sockets

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

    【讨论】:

    • 非常感谢您的回复。我理解缺少的部分。但是如果我接受来自客户端的连接(大师:我正在使用一个名为 INCA 的工具将连接命令发送到服务器)。那么接受电话会是什么? (因为我没有在客户端创建套接字)
    • 点击上面的accept() 并阅读文档。服务器软件需要告诉套接字层传入的连接将在其套接字上被接受。
    • 我在上面的程序中编辑并添加了accept、bind和listen代码。然后客户端也无法连接。你能帮我吗??
    • 客户端和服务器在同一个子网上吗?客户端是否尝试连接到192.168.0.1:18001?那是您绑定服务器的地方。您也没有对listen() 进行任何错误处理。
    • 你说的是对的。如何在监听时进行错误处理(你能给我一个例子吗)??
    猜你喜欢
    • 1970-01-01
    • 2010-10-16
    • 2013-02-07
    • 2020-01-11
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多