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