2011-03-01 114 views
1

我在Windows上的C中實現:發送者和接收者之間的通信通道。在同一個套接字上發送和接收

該頻道必須接收發件人的包裹,將其轉發給接收者,然後從接收者返回給發件人。

通道上的端口1連接到發送者(也許多個發送者),並連接到接收機上的端口2

是什麼做的好方法?端口1和2都必須能夠發送和接收。如何在這種情況下使用select?

我想使用單線程環境。

+0

使問題更清楚,我如何使用select來轉移發件人 - >收件人,並在收到回來後 - >發件人?如果我在讀和寫中使用選擇相同的套接字,那麼在調用選擇之後,端口是否可以處於讀和寫狀態?困惑 – Michael 2011-03-01 20:21:54

回答

2

不確定你的確切問題,但確實TCP套接字是雙向的。 在同一個select調用中,您可以將同一個文件描述符放入讀和寫(除FD_SETs)之外。

+0

謝謝!所以我把同樣的FD_SET在讀和寫。然後對於單向(發送者到接收者),我檢查發送者fd是否準備好發送,並檢查接收者fd是否準備好接收?然後在回來的路上我再次選擇?這有點令人困惑,因爲我必須先轉換一個方向然後再轉回。 – Michael 2011-03-01 20:20:45

+1

你把你需要的所有FD都讀入FD_SET中,並且在寫入FD_SET時需要寫入所有的FD。一個套接字可以放在兩個集合中,實際上兩個集合都可以包含相同的套接字,但FD_SET需要不同。當選擇返回(沒有錯誤)時,檢查哪些FD準備好讀取或寫入(使用FD_ISSET),並執行任何需要完成的操作。不要忘記在完成後關閉所有的插座! – Mat 2011-03-01 20:35:52

0

問題不是很清楚,但TCP連接是雙向的 - 並且不需要爲每個方向打開一個單獨的套接字。

相關問題