所以我試圖做一個服務器,偵聽多個端口。 我在選擇頭部時遇到問題。選擇幫助?
有人可以給我一點點的僞代碼,我做事情的原因和原因。
我知道我將兩個獨立的套接字綁定到不同的端口。當然。但是,我可以在兩個端口上調用listen嗎?
在我的客戶端上,我是否只需調用connect,並且listen會注意到連接嘗試?我如何選擇接受它?
對不起,有新手問題。我嘗試了beejs指南和其他一些,但它們並沒有真正涵蓋多個端口(它們似乎都使用相同的示例)。
謝謝!
所以我試圖做一個服務器,偵聽多個端口。 我在選擇頭部時遇到問題。選擇幫助?
有人可以給我一點點的僞代碼,我做事情的原因和原因。
我知道我將兩個獨立的套接字綁定到不同的端口。當然。但是,我可以在兩個端口上調用listen嗎?
在我的客戶端上,我是否只需調用connect,並且listen會注意到連接嘗試?我如何選擇接受它?
對不起,有新手問題。我嘗試了beejs指南和其他一些,但它們並沒有真正涵蓋多個端口(它們似乎都使用相同的示例)。
謝謝!
在服務器上調用bind
和listen
之後,套接字的fd只是另一個可用於調用select
的fd。當select
返回並指示該fd上的數據時,可以在fd上調用accept
開始接收數據。
編輯:此外,您收到的FD當您連接accept
是另一個fd可以傳遞給select
調用。
客戶端: 您只需調用connect即可。
服務器端的步驟都或多或少如下:
所以當你說「開始聆聽」時,這意味着我可以進行多個聽力調用?就像我可以說'聽(sock1,QUEUE_SIZE)'和'listen(sock2,QUEUE_SIZE)'並且他們不會互相攻擊? – Blackbinary 2011-04-03 20:55:50
@Blackbinary:沒有,你可以讓一個人打聽聽筒 – Heisenbug 2011-04-03 21:05:22
@ 0verbose - 他是指兩個獨立的聽筒。@Blackbinary - 是的,您可以在兩個獨立的套接字上打聽電話。你應該讓它們在發生任何這種情況之前都是非阻塞的。 – Duck 2011-04-03 21:10:52
所以在我的選擇中,我有2個可能的套接字。當select返回時,我怎麼知道它返回的是哪個套接字? – Blackbinary 2011-04-03 20:57:00
@Blackbinary:使用FD_ISSET – Heisenbug 2011-04-03 21:07:08
@Blackbinary - 它可以返回,因爲其中一方或雙方(或者沒有,但讓我們離開那一天)。選擇將返回多少個套接字(文件描述符)準備就緒。你通過調用FD_ISSET()來循環。如果描述符已準備就緒,並且您調用accept(),則返回true。你需要跟蹤FD的情況。 – Duck 2011-04-03 21:07:44