2015-03-13 161 views
1

我想連接我的C#客戶端到我的C服務器。 客戶端位於Windows和Linux上的服務器上。錯誤連接到C#客戶端到C服務器

服務器正常運行,但客戶端無法連接,連接超時。

C服務器:

int main() 
{ 
int socketid; 
int clientid = 0; 
char bufer[1024]; 
struct sockaddr_in serv_addr, client_addr; 
memset(&serv_addr, 0, sizeof(serv_addr)); 
int addrlen = sizeof(client_addr); 

printf("Start\n"); 

if((socketid = socket(AF_INET, SOCK_STREAM, 0)) < 0){ 
    printf("Error ceating socket!\n%s", strerror(errno)); 
    getchar(); 
    return 0; 
} 
printf("S0cket created\n"); 
serv_addr.sin_family = AF_INET; 
serv_addr.sin_addr.s_addr = INADDR_ANY; 
serv_addr.sin_port = 802; 

if(bind(socketid, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) < 0){ 
    printf("%s\n", strerror(errno)); 
    getchar(); 
    return 0; 
} 
printf("Bindend\n"); 
listen(socketid, 0); 
printf("Listening\n"); 

printf("Entering loop\n"); 
while(1) 
{ 
    sleep((50)*1000); 
    clientid = accept(socketid, (struct sockaddr*) &client_addr, &addrlen); 
    if(clientid > 0){printf("accepted");}else{printf("error");} 
} 
} 

C#客戶端:

void btnClick(object Sender, EventArgs e) 
{ 
    TcpClient client = new TcpClient(); 
    client.Connect("192.168.1.102", 802); 
} 

有什麼不對?

在此先感謝

+0

您是否收到任何錯誤?或者只是一個時間? – MyCodeSucks 2015-03-13 14:51:28

+0

我得到一個超時異常 – Rumd 2015-03-13 14:57:07

回答

0

在Linux上你肯定需要這樣的:

serv_addr.sin_port = htons(802); 

,因爲你需要去的形式主機到網絡秩序。 因此,您的服務器實際上正在偵聽與您預期不同的端口。即802字節反轉。

+0

它仍然沒有工作,任何其他建議? – Rumd 2015-03-13 19:18:33

+0

ping你想訪問的服務器IP地址。檢查是否沒有防火牆,在移到遠程機器之前先在本地運行服務器和客戶端。 – 2015-03-13 19:22:53

+0

ping工作,沒有防火牆,編譯器給出錯誤,如果我在Windows上運行它,所以我不能在本地運行它。 客戶端仍然給出SocketExeption。 – Rumd 2015-03-14 12:36:36

0

這是因爲你必須在linux上做端口轉發。 linux的防火牆設置不允許在服務器上接收任何數據。

  1. 轉到系統選項卡 - >管理。
  2. 選擇防火牆
  3. 選擇其他港口
  4. 添加端口希望服務器使用

現在運行的服務器

相關問題