看板 C_Sharp 關於我們 聯絡資訊
請問一個Socket的Server-Client機制 如果我設計的架構Client,具有傳送和接收server廣播的功能 1. 傳出動作流程有作接收ACK 確認命令是否成功傳到Server端 Server收到Client訊息會回傳ACK字串 2. 有一隻接收的執行緒在等待Server傳命令過來 這樣當再作動作一時候,Server傳ACK過來時候 有可能會被動作二的等待接收的執行緒搶走 這邊架構應該怎麼設計會比較好? 讓接收這個動作同時存在1,2兩個地方 還是ACK有別得方法實現不會干擾? 初學Socket,請指點一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.78.236
andymai:所以是兩條執行緒都在等著收封包?弄第三條執行緒專門收封 08/01 12:45
andymai:包~收到之後立刻判斷該給哪條執行緒執行~會不會比較好? 08/01 12:46
andymai:不然就是不要 bind 同一個 port 了... 08/01 12:48
只有接收一條執行緒 while (true) { byte[] data = new byte[1024]; int recv = this.socket.Receive(data); ... } 參考範例寫法是這樣 執行緒跑到Receive就會停住直到有命令近來才會往下走 傳送是用副程式 流程是 傳出之後用do-while迴圈 判斷有無收到Server回傳"ACK" 否則 重傳三次 專收訊息再分派的方向有思考過 想不太出來怎作 ※ 編輯: Achillean 來自: 122.116.78.236 (08/01 12:55)
andymai:???那就把接收這條當成專門收的執行緒啊?另外再開一條執行 08/02 09:37
andymai:緒來專門處理~不就好了?避免接收和處理忙不過來~應該還要 08/02 09:39
andymai:有個queue來放待處理的資料就是了... 08/02 09:39
Beramode:既然只有一個thread在接資料,你回傳的ACK就要能被判斷 08/09 14:57
Beramode:是誰回傳的 08/09 14:59