[問題] Socket,Client,ACK的架構問題

看板C_Sharp (C#)作者 (山豬元年革命志士)時間12年前 (2013/08/01 11:05), 編輯推噓0(008)
留言8則, 2人參與, 最新討論串1/1
請問一個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

08/01 12:45, , 1F
所以是兩條執行緒都在等著收封包?弄第三條執行緒專門收封
08/01 12:45, 1F

08/01 12:46, , 2F
包~收到之後立刻判斷該給哪條執行緒執行~會不會比較好?
08/01 12:46, 2F

08/01 12:48, , 3F
不然就是不要 bind 同一個 port 了...
08/01 12:48, 3F
只有接收一條執行緒 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)

08/02 09:37, , 4F
???那就把接收這條當成專門收的執行緒啊?另外再開一條執行
08/02 09:37, 4F

08/02 09:39, , 5F
緒來專門處理~不就好了?避免接收和處理忙不過來~應該還要
08/02 09:39, 5F

08/02 09:39, , 6F
有個queue來放待處理的資料就是了...
08/02 09:39, 6F

08/09 14:57, , 7F
既然只有一個thread在接資料,你回傳的ACK就要能被判斷
08/09 14:57, 7F

08/09 14:59, , 8F
是誰回傳的
08/09 14:59, 8F
文章代碼(AID): #1H-T1zMm (C_Sharp)
文章代碼(AID): #1H-T1zMm (C_Sharp)