2011-05-02 64 views
0

好吧,我是套接字編程的新手,我的程序沒有像我期望的那樣工作。在我看到的有關套接字編程的所有示例中,他們使用accept(),並且假定已建立連接後的所有代碼。Socket編程accept()in C

但我的accept()在我啓動服務器後立即調用。這是否應該發生?還是服務器應該在執行程序的其餘部分之前等待連接?

編輯:哎呀我忘了提及它是一個TCP連接。

+2

請顯示您的代碼。 – 2011-05-02 02:54:18

+0

你在什麼操作系統上? – 2011-05-02 03:54:52

回答

0

我認爲這就是你想要的。

http://www.sockets.com/winsock.htm#Accept

WINSOCKET規劃中的主要概念是你與阻塞或非阻塞的套接字工作。大多數情況下,如果您使用阻塞套接字,則可以查詢套接字接收套件,以查看是否有任何呼叫會導致您阻止正在阻塞的例程。

考慮到使用此UDP數據報協議。另一方面,TCP是一種流媒體協議。因此,關於發送和接收的數據塊,思考起來會更容易。

0

對於服務器,您可以:

  • 創建插座 - socket()
  • 將它綁定到一個地址。
  • 你進入一個循環中,你:
    • 監聽連接嘗試
    • 接受並處理它們

無論你正在做的所有這些步驟,這是不是從你的描述清楚。

有對「他們處理」階段,這取決於你是否計劃有一個單線程單進程處理下一個前處理一個請求,或者您是否計劃擁有多個選項的多線程單進程,其中一個線程接受請求並創建其他線程來執行處理(而一個線程等待下一個傳入連接),或者是否計劃讓子進程與子進程分叉處理新請求,同時父進程返回到傾聽下一個請求。

0

在開始監聽連接後,您應該進入您的驗收循環。使用select()來檢測未決的客戶端連接何時準備好被接受,然後致電accept()接受它。