我用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("%s\n",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的所有端口上的服務器的本地IP設置爲21000 http://img593.imageshack.us/img593/3959/schermata20110405a22492.png
端口20600似乎是開據canyouseeme.org/和yougetsignal.com/tools/open-ports/(其實我可以在一個數據包已經收到控制檯)讀取,但如果我跑
telnet 151.53.150.45 20600
我得到一個「連接被拒絕」的錯誤。 防火牆在路由器和服務器計算機上都是禁用的(即運行的telnet相同)。
任何幫助?
路由器經常有配置設置,告訴他們接受/拒絕ping,telnet等。你可以telnet或瀏覽到路由器,看看配置設置發生了什麼? – 2011-04-07 18:04:17
你已經問過這個 - http://stackoverflow.com/questions/5558042/remote-socket-connection-c。正如Emil在該主題中提到的那樣,您可能想要查看http://superuser.com。這似乎不是特定於您的代碼的問題。 – jwd 2011-04-07 18:05:32