c TCP中的套接字我如何测试连接?

Posted

技术标签:

【中文标题】c TCP中的套接字我如何测试连接?【英文标题】:Socket in c TCP how do i test connection? 【发布时间】:2020-08-23 05:09:00 【问题描述】:

对于一个学校项目,我必须使用套接字来创建服务器,我想我设法做到了,但我应该使用 Telnet 来测试它,每当我尝试时,我都会得到

telnet:连接到地址 0.0.0.0:连接被拒绝

所以我猜是我的 IP 错了。

我的代码的简化版本应该仍然适用于一个连接是

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

    int sock;
    int fd = 0;
    int err = 0;
    struct sockaddr_in sock_data;
    socklen_t addr_size;
    char *path;

    path = get_current_dir_name();

    if (argc == 2)
        printf("%s", Usage);

    sock = socket(AF_INET , SOCK_STREAM , 0);
    if (sock == -1) 
        printf("Could not create socket");
        return (84);
    

    memset(&sock_data, 0, sizeof(struct sockaddr_in));
    sock_data.sin_family = AF_INET;
    sock_data.sin_port = htons(5133);
    sock_data.sin_addr.s_addr = htonl(INADDR_ANY);
    printf("%s, %s, %s\n", path, sock_data.sin_addr, inet_ntoa(sock_data.sin_addr));

    if (bind(sock, (const struct sockaddr *) &sock_data, sizeof(sock_data)) == -1)
        printf("Error with binding\n");

    if (listen(sock, LISTEN_BACKLOG) == -1)
        printf("Error with listen");

    addr_size = sizeof(struct sockaddr_in);
    err = accept(sock, (struct sockaddr *) &sock_data, &addr_size);

    while ((sock = accept(sock, NULL, NULL)) < 0)
        err = 0;
    return 84;

我看到了这个链接:TCP sockets in c 这很清楚,但我仍然不明白我应该如何测试我的程序

而且我越努力,我就越确信我一定犯了一个愚蠢的错误。

那么你知道我哪里出错了吗?

【问题讨论】:

附带说明,accept(sock, (struct sockaddr *) &amp;sock_data, &amp;addr_size) 需要移动到 while 循环内(或删除,因为 accept(sock, NULL, NULL) 已经在循环内就足够了)。但是,你不是close()'ing 任何由accept() 返回的描述符。而且,在sock = accept(sock, NULL, NULL) 中,您正在重新分配sock,因此无法访问您的侦听套接字(您也不是close'ing())。您需要为侦听和接受的套接字使用单独的描述符变量。 谢谢!我是使用套接字的新手,这很有帮助!如果您有其他建议,请不要犹豫;) 【参考方案1】:

在您的 Telnet 命令中,您错过了一个端口。 commamd 应该像一个

telnet system_ip port

例如

telnet 192.168.1.1 5631

【讨论】:

或 127.0.0.1 如果在同一台机器上(因为 OP 正在侦听所有接口) 没问题我们也犯了错误。在这里提问,我们随时准备互相帮助:)

以上是关于c TCP中的套接字我如何测试连接?的主要内容,如果未能解决你的问题,请参考以下文章

C ++中的TCP服务器套接字打开失败

地址已在使用中... C 中的套接字

如何在 C++/QT 中使用 TCP 服务器套接字创建 Http 服务器

如何使用 C 对 TCP 和 UDP 进行基准测试?

如何在 VB.NET 中检查 TCP 服务器(套接字)与 TCP 客户端的连接状态

为啥 Node.js 中的某些 TCP 套接字比大多数其他套接字需要更多的时间来连接?