套接字远程连接问题C

我用C编写了一个简单的服务器应用程序。除了打印收到的消息,然后退出,服务器什么都不做这是代码
int listenfd,connfd,n;
struct sockaddr_in servaddr,cliaddr;
socklen_t clilen;

char *mesg = (char*) malloc(1000*sizeof(char));

listenfd=socket(PF_INET,SOCK_STREAM,0);

bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port=htons(20600);

bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

listen(listenfd,5);

clilen=sizeof(cliaddr);
connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);


n = (int) recvfrom(connfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&clilen);
sendto(connfd,mesg,n,0,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
printf("-------------------------------------------------------n");
mesg[n] = 0;
printf("Received the following:n");
printf("%sn",mesg);
printf("-------------------------------------------------------n");


close(connfd);
close(listenfd);
我设法使用telnet建立连接并运行
telnet 192.168.1.2 20600
其中192.168.1.2是服务器的本地ip。 机器在路由器ZyXel p-660HW-61(192.168.0.1)后面运行。 问题是,如果我指定机器的公共IP(151.53.150.45),我无法访问服务器。 我将NAT配置设置为从20000到21000的所有端口上的服务器本地IP http://img593.imageshack.us/img593/3959/schermata20110405a22492.png 根据canyouseeme.org/和yougetsignal.com/tools/open-ports/(实际上我可以在控制台中读取已收到数据包的信息),端口20600似乎是开放的,但是如果我运行的话
telnet 151.53.150.45 20600
我收到“拒绝连接”错误。 防火墙在路由器和服务器计算机上都是禁用的(即运行的telnet相同)。 有帮助吗?     
已邀请:
如果您输入:
telnet 151.53.150.45 20600
从局域网而不是从广域网,你的NAT很可能不能正确处理发夹情况。这意味着它只希望您使用WAN中的转换地址。 解决方案是检查您是否可以更改NAT的配置以在LAN上启用翻译地址的使用(有时这是P2P系统的要求)。如果这些功能不可用,那么您需要一个新的NAT。     

要回复问题请先登录注册