作者Achillean (山豬元年革命志士)
看板C_Sharp
標題[問題] Socket,Client,ACK的架構問題
時間Thu Aug 1 11:05:30 2013
請問一個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
1F:→ andymai:所以是兩條執行緒都在等著收封包?弄第三條執行緒專門收封 08/01 12:45
2F:→ andymai:包~收到之後立刻判斷該給哪條執行緒執行~會不會比較好? 08/01 12:46
3F:→ 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)
4F:→ andymai:???那就把接收這條當成專門收的執行緒啊?另外再開一條執行 08/02 09:37
5F:→ andymai:緒來專門處理~不就好了?避免接收和處理忙不過來~應該還要 08/02 09:39
6F:→ andymai:有個queue來放待處理的資料就是了... 08/02 09:39
7F:→ Beramode:既然只有一個thread在接資料,你回傳的ACK就要能被判斷 08/09 14:57
8F:→ Beramode:是誰回傳的 08/09 14:59