2015-10-30 152 views
1

我一直在那裏我不能夠將兩臺服務器連接在一起使用這種簡單的服務器我用C寫了一個問題:服務器無法連接到遠程計算機(Linux)的

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include "hacking.h" 

#define PORT 7890 // the port users will be connecting to 

int main(void) { 
     int sockfd, new_sockfd; // listen on sock_fd, new connection on new_fd 
     struct sockaddr_in host_addr, client_addr;  // my address information 
     socklen_t sin_size; 
     int recv_length=1, yes=1; 
     char buffer[1024]; 

     if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) 
       fatal("in socket"); 

     if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) 
       fatal("setting socket option SO_REUSEADDR"); 

     host_addr.sin_family = AF_INET;   // host byte order 
     host_addr.sin_port = htons(PORT);  // short, network byte order 
     host_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP 
     memset(&(host_addr.sin_zero), '\0', 8); // zero the rest of the struct 

     if (bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct sockaddr)) == -1) 
       fatal("binding to socket"); 

     if (listen(sockfd, 5) == -1) 
       fatal("listening on socket"); 

     while(1) { // Accept loop 
       sin_size = sizeof(struct sockaddr_in); 
       new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size); 
       if(new_sockfd == -1) 
         fatal("accepting connection"); 
       printf("server: got connection from %s port %d\n",inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); 
       send(new_sockfd, "Hello World!\n", 13, 0); 
       recv_length = recv(new_sockfd, &buffer, 1024, 0); 
       while(recv_length > 0) { 
         printf("RECV: %d bytes\n", recv_length); 
         dump(buffer, recv_length); 
         recv_length = recv(new_sockfd, &buffer, 1024, 0); 
       } 
       close(new_sockfd); 
     } 
     return 0; 
} 

當我運行這個在服務器A碼通過執行以下命令:

gcc simple_server.c 
./a.out 

telnet 172.31.**.*** 7890 
服務器B

,我得到的是

Trying 172.31.**.***... 

我在這裏可能會做什麼錯?謝謝。

+0

有服務器A和B之間的航線(例如你可以ping或tracetoute)?防火牆規則(無論是在服務器上還是在它們之間的任何路由器上)都會阻塞端口7890連接? – cas

+0

由於您沒有描述您的網絡拓撲結構,我建議您確保例如路由器上的端口轉發。當然,機器內部的防火牆也必須接受連接。請編輯你的問題讓我們知道。 – Vlastimil

+0

用例如'nc -l -p 7890'取代你的服務器,看看你的telnet是否可用。如果沒有,請修復您的防火牆。用'-Wall'編譯你的服務器並修正所有警告。用'-g'編譯並用'gdb'運行,這樣你就可以看到它的功能。 – meuh

回答

2

這是因爲你的服務器上的防火牆的 它試圖連接服務器,但該數據包不斷下降,由於防火牆規則

的防火牆規則

iptables的名單運行下面的命令-L

然後運行下面的命令來添加規則端口7890

是iptables -I INPUT -p TC p --dport 7890 -j ACCEPT

如果不工作,然後檢查是否在之間的路由器都滴速包

相關問題