我创建了一个非常简单的服务器程序来接受连接发送" 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);
}
}`
答案 0 :(得分:0)
原则上,您可以绑定到0.0.0.0
(应该与注释中的INADDR_ANY
相同)以侦听所有IPv4地址。这意味着您将能够接受环回连接以及所有网卡上的连接(从而来自外部)。这应该对你有用(假设剩下的程序在环回时可靠地工作)。
如果您无法在同一网络上从PC外部进行连接,则很可能存在防火墙配置问题。如果没有明确的防火墙规则允许,某些操作系统会默认阻止来自外部的传入连接。
如果您想从互联网连接到PC并且通过带NAT的路由器连接,您还必须配置路由器以正确转发连接。