2011-08-21 133 views
1

我試圖發展與C.錯誤:「傳輸端點已經連接」

小聊天服務器

對於一個簡單的聊天服務器,

  • (運輸終點)===(插座) ?
  • 我是否必須爲每個客戶端使用一個套接字,還是可以爲多個客戶端重複使用套接字?如果是這樣,怎麼樣?
  • 有沒有這樣做的標準方式?
  • 有沒有很好的參考?

我可以看到一些示例實現嗎?我必須使用gcc編譯器和c語言來完成這個任務。

+0

每個帖子有一個問題,請。你能選擇一件事來問嗎?你的文章的標題有一個非常好的,具體的錯誤信息,但是那時你的文章根本就沒有這個意思。 –

+0

okey,我很樂意爲題目得到答案。是的,身體引導我回答這個問題:) – Jaseem

+0

如果你希望我們回答標題問題,那麼如何編輯所有其他材料並用一些可以幫助我們回答標題問題的東西取代它,例如你試圖運行哪些代碼導致該錯誤? –

回答

3

你需要一個套接字/客戶端,不,你不能重用套接字。如果您必須處理多個客戶端,您可以:

  • 爲每個客戶端創建一個線程並使用阻塞I/O(最好具有超時)。
  • 創建單線程程序並使用select/poll/epoll/kqueue解複用並使用非阻塞I/O。
  • 使用異步I/O。

對於C socket通信示例Unix Network Programming本書可能是最好的來源。它有充足的示例程序和解釋。

+0

對不起,我認爲你所說的話有內容,但我不太瞭解!我很樂意以多線程的方式做到這一點。 – Jaseem

+0

'UNIX網絡編程'是漫長而複雜的: – Jaseem

+0

跳過你不感興趣的章節... –

1
  1. (Transport endpoint)===(socket)?

NO。 「端點」是指帶有端口號的IP地址。套接字呈現一個「會話」,會話由兩個端點,本地端點(IP,端口)和遠程端點(IP,端口)組成。

  1. 我是否必須使用每個客戶一個插座,或者我可以重用的 多個客戶端的插座?如果是這樣,怎麼樣?

每個會話一個套接字。這意味着服務器需要爲每個遠程端點(客戶端)創建一個新的套接字。您可以在不再使用套接字時重新使用套接字。尋找SO_REUSEADDR套接字選項。

  1. 有沒有這樣做的標準方法?

不知道你在問什麼。聊天服務或服務器/客戶端模型的標準方式? 對於聊天服務,請查找IRC。服務器/客戶端編程模型已有詳細記錄。你可以谷歌它。

  1. 是否有很好的參考?

http://beej.us/guide/bgnet/

現在我相信你明白錯誤信息的意思。

+0

如果我想連續地將數據從1個客戶端傳輸到1個服務器(簡單字符串從標準輸入)我應該怎麼做? – Jaseem

+0

你爲什麼不讀我提到的參考資料?http://beej.us/guide/bgnet/output/html/multipage/clientserver.html – young

+0

我在上面!現在通過參考。 – Jaseem