2010-11-20 104 views
1

一個進程可以並行打開/維護2個TCP連接嗎? [用於發送和接收]。 我嘗試以下情形:C中的多個TCP連接

1)客戶端連接到服務器的一個端口上,說13101.

2)一旦發出,它會等待另一個端口13102上拿到ACK。

3)在這裏服務器可以處理多個連接[在同一端口號上使用select()]。

現在,我面臨兩個問題: 1)服務器從客戶端1接收數據,它正在處理數據併發回ACK [給客戶端1],我正在準備一個新的TCP連接[與端口13102]和試圖發送數據。它以「拒絕連接」失敗。

2)爲了驗證上述問題,我編寫了另一個client2程序,它只是將數據發送到端口13102 [在client1處於監聽模式時]。仍然client2得到「連接被拒絕」錯誤。

回答

1

是的,你可以打開很多插座!但是,您不應該需要單獨的套接字來發送和接收,TCP套接字在打開時是雙向的。 至於你的錯誤,如果你使用兩臺機器,可能會有防火牆阻止服務器連接到你的客戶端。您可以嘗試使用telnet嘗試連接到同一個端口。

+0

Bret,Iam在同一臺機器上運行客戶端/服務器。是的,你說的是TCP/IP套接字是雙向的。當我第一次遇到上述錯誤時,我更改爲2個套接字。仍然錯誤仍然存​​在。 – 2010-11-20 10:25:51

+1

您需要發佈一些源代碼才能獲得更多。連接被拒絕意味着或者沒有任何綁定到有問題的端口,或者其他東西拒絕它(因此防火牆理論)。你確實要調用bind()嗎? – 2010-11-20 10:34:18

0

該錯誤可能是因爲客戶端沒有監聽傳入連接。如上所述,您可以使用單個套接字進行發送和接收。