我想要一個服務器程序,它應該只接受最多一個連接,並且應該放棄其他連接。我怎樣才能做到這一點?如何限制客戶端服務器程序中的連接數
0
A
回答
4
只有accept()
單個連接。
這裏是一個典型的服務器例行:
s = socket(...);
bind(s, ...);
listen(s, backlog);
while (-1 != (t = accept(s, ...))) {
// t is a new peer, maybe you push it into an array
// or pass it off to some other part of the program
}
每完成accept()
通話,返回一個新的連接的文件描述符。如果您只希望收到一個單個連接,則只需要accept()
一次。想必你完成後該聽,因此,關閉您的服務器太:
s = socket(...);
bind(s, ...);
listen(s, backlog);
t = accept(s, ...);
close(s);
// do stuff with t
如果您希望只一次處理一個連接,並連接關閉後,恢復聽力,然後執行上面的accept()
循環,並確實接受進一步的連接,直到t
已關閉。
0
是否要拒絕所有連接或創建隊列? 我認爲你正在尋找的是所謂的「單身人士」。 看看單身設計模式的wikipadia。
+1
我不認爲他會找到C的Singleton模式;) – Prine 2010-11-12 12:40:52
0
更正看到下面:
您可以定義在
接受的請求量聽方法。
listen(socketDescription, numberOfConnectionsPending);
第二個參數是設置掛起連接的數量,而不是連接本身的量..
如果設置了
numberOfConnections 1所有其他客戶端,它發送一個請求到服務器將收到一個
超時錯誤 ..
在這裏您可以找到更多的信息:http://shoe.bocks.com/net/#listen
我讀了聽錯文檔。你應該使用Matt的答案中描述的accept方法。
相關問題
- 1. 應用程序服務器:限制併發客戶端連接的數量
- 2. 客戶端連接或服務器端?
- 3. Twisted:到TCP服務器的客戶端連接數有限?
- 4. 服務器/客戶端連接(Python)的
- 5. Alchemy Websocket服務器 - 如何強制斷開客戶端連接?
- 6. 如何強制HTTP2客戶端重新連接到服務器?
- 7. 客戶端/服務器應用程序連接重置的Java
- 8. 客戶端應用程序與服務器的連接
- 9. 簡單的Java客戶端 - 服務器:客戶端doent連接到服務器
- 10. UDP客戶端和服務器連接
- 11. JAVA TCP客戶端 - 服務器連接
- 12. 連接客戶端服務器RMI
- 13. 連接到服務器http客戶端
- 14. 瞭解客戶端 - 服務器連接
- 15. Oracle客戶端服務器連接
- 16. MySQL連接服務器客戶端
- 17. Socket.io客戶端未連接服務器
- 18. 客戶端 - 服務器UDP連接
- 19. 客戶端 - 服務器連接
- 20. C服務器連接到客戶端
- 21. 「MFC/C++ Socket編程..」如何連接服務器和客戶端?
- 22. 如何遠程連接python tcp客戶端和服務器?
- 23. 服務器 - Android應用程序和服務器之間的客戶端連接
- 24. 如何在UDP無連接客戶端 - 服務器對中在固定端口上運行客戶端程序
- 25. 將MySQL連接到Java客戶端/服務器應用程序
- 26. 多客戶端連接時C#服務器程序掛起
- 27. 修復:C++服務器/客戶端程序:「連接被拒絕」
- 28. 服務器端客戶端程序C
- 29. c#服務器客戶端,客戶端不重新連接
- 30. 如何將客戶端數據附加到服務器連接?
感謝您的寶貴意見,其實我怎麼知道第一個連接是否已經關閉?因爲如果我的第一次連接是理想的一段時間?如果我收到一個新的連接,我必須在接受這個新連接之前檢查第一個連接是否處於活動狀態。我們有辦法實現這種情況嗎? – Thangaraj 2010-11-13 05:10:25
當你從一個套接字讀取()時,它已經關閉,它將返回0.你也可以通過調用'close()'或'shutdown()'來自己關閉它。只要不滿意你已完成連接,就不要從你的函數處理't'中返回。請記住,一次處理多個連接是可能的,但我認爲處理單個連接就是你所追求的。 – 2010-11-13 08:57:25
真的很棒的回答Matt Jonier,在這裏我們還有一個問題,假設讀/寫由其子進程處理,並且連接由其父進程處理。在這種情況下,如果我們使用read()檢查連接狀態來實際讀取一些數據,我們需要IPC將數據從父進程發送到子進程,這是不是開銷?我們是否也有解決方案?我有一個解決方案。我們可以使用getpeername()來檢查當前活動連接的狀態,是否會有任何副作用?我不確定這是否能解決問題?請分享您的想法。 – Thangaraj 2010-11-13 13:24:53