用C语言创建的TCP服务器无法在Internet上运行

时间:2017-01-26 05:29:23

标签: tcp

我创建了一个非常简单的服务器程序来接受连接发送" Hello World"回到客户端。我使用telnet连接到服务器(localhost),它工作正常。现在我想通过互联网运行它,它无法正常工作。我尝试将其绑定到我的公共IP地址(在谷歌上搜索)并且它不起作用.server_socket = socket(AF_INET,SOCK_STREAM,0);

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);
    }
}`

1 个答案:

答案 0 :(得分:0)

原则上,您可以绑定到0.0.0.0(应该与注释中的INADDR_ANY相同)以侦听所有IPv4地址。这意味着您将能够接受环回连接以及所有网卡上的连接(从而来自外部)。这应该对你有用(假设剩下的程序在环回时可靠地工作)。

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

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