Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言创建的TCP服务器在internet上不工作_Tcp - Fatal编程技术网

用C语言创建的TCP服务器在internet上不工作

用C语言创建的TCP服务器在internet上不工作,tcp,Tcp,我已经创建了一个非常简单的服务器程序来接受连接并将“Hello World”发送回客户端。我使用telnet连接到服务器(localhost),它工作正常。现在我想在internet上运行它,但它不工作。我尝试将它绑定到我的公共IP地址(在谷歌上搜索),但它不起作用 原则上,您可以绑定到0.0.0.0(与注释中的INADDR\u ANY相同)以侦听所有IPv4地址。这意味着您将能够接受环回连接以及所有网卡上的连接(从而从外部)。这应该适合您(假设剩余的程序在环回上可靠地工作) 如果无法从电脑外部

我已经创建了一个非常简单的服务器程序来接受连接并将“Hello World”发送回客户端。我使用telnet连接到服务器(localhost),它工作正常。现在我想在internet上运行它,但它不工作。我尝试将它绑定到我的公共IP地址(在谷歌上搜索),但它不起作用


原则上,您可以绑定到
0.0.0.0
(与注释中的
INADDR\u ANY
相同)以侦听所有IPv4地址。这意味着您将能够接受环回连接以及所有网卡上的连接(从而从外部)。这应该适合您(假设剩余的程序在环回上可靠地工作)

如果无法从电脑外部连接到同一网络,则很可能存在防火墙配置问题。如果没有明确的防火墙规则允许,某些操作系统默认会阻止来自外部的传入连接


如果您想从internet连接到PC,并且通过带有NAT的路由器连接,您还必须配置路由器以正确转发连接。

OP绑定到192.168.43.241,一个不可路由的地址。因此,您对OP可能存在防火墙问题的观察可能是正确的。你能给OP解释一下什么是不可路由的IP地址吗?实际上我是套接字编程(网络编程)的初学者。192.168.43.241是我在谷歌上搜索的公众。
serverAddr.sin_family = AF_INET;
serverAddr.sin_port= htons(7892);
serverAddr.sin_addr.s_addr = inet_addr("192.168.43.241");//htonl(INADDR_ANY);//INADDR_ANY;//inet_addr("157.48.97.106");

memset(serverAddr.sin_zero,'\0',sizeof serverAddr.sin_zero);

bind(server_socket, (struct sockaddr *)&serverAddr,sizeof(serverAddr) );

if(listen(server_socket,5)==0)
    printf("listening\n");

addr_size=sizeof client_addr;


printf("IP address is: %s\n", inet_ntoa(serverAddr.sin_addr));


while(1)
{
    client_socket= accept( server_socket,(struct sockaddr *)&client_addr,&addr_size);
    printf("Waiting\n");
    printf("client_socket   %d\n",client_socket);
    int pid=fork();
    if(pid>0)
    {
        printf("PID:%d\n",pid);
        dup2(0,client_socket);
    }
    else
    {
        dup2(client_socket,0);
        printf("%d    %d\n",pid,client_socket);
        send(client_socket,buffer,strlen(buffer),0);
        printf("Message Sent\n");
        shutdown(client_socket,0);
        close(client_socket);
        perror("CLOSE");
        printf("Connection Closed\n");
        exit(0);
    }
}`