作者VVll (J.)
看板C_Sharp
標題Re: [問題] 如何讓client持續等待
時間Mon Jun 23 22:03:38 2014
※ 引述《tree581 (talltree)》之銘言:
: 我的client socket每次接受完檔案就停止
: 我要如何讓它持續地等待...
: 就算接收完檔案也還會繼續等待接收下一個檔案
: 這是我的接收端程式碼: http://paste.ideaslabs.com/show/zZWKYkz9xP
: 後來我試著加timer也: http://paste.ideaslabs.com/show/qKqo9KduXw
: 結果都沒反應....
: 我的發送端程式: http://paste.ideaslabs.com/show/ZYRhYBH1r6
: 求救 如何讓它執行完還能繼續等待
先說明你程式碼的問題
clientSock.Close();
當程式執行到這行時,socket就已經被關閉了,當然不會繼續收到訊息
要寫socket 基本有兩個作法可以作
同步 跟 非同步 MSDN上都有飯粒,下面兩個連結是非同步作法
Asynchronous Client Socket Example
http://msdn.microsoft.com/zh-tw/library/bew39x2a(v=vs.110).aspx
Asynchronous Server Socket Example
http://msdn.microsoft.com/zh-tw/library/fx6588te(v=vs.110).aspx
最常見的作法是同步的,但你要建一條thread去負責某個client的監聽
因為如果是單續的,就會因為同步的關係,導致程式卡在某個client的receive上
所以有幾個client在連線就要建幾條thread 去做監聽
而非同步的,就是用事件委派的方法去處理,好處就是你不用自己處理多續問題
而不管同步或者 非同步
都必須考慮到一個問題,傳遞的過程中,資料可能接收不完整
比如
21:55:30 client send: AA
21:55:31 client send: BB
21:55:35 server recieve: AAB
21:55:36 server recieve: B
這個情況是可能發生的
所以要自己去作資料檢查的處理與驗證
常見的幾個方法
1. XML
2. JSON
3. 自己定義封包格式
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.240.239.100
※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1403532224.A.91D.html
推 neo5277:推 06/24 00:08
推 nfsong:push 06/24 12:44
→ a926:記得做這類的時候 傳送跟接收 都要讓資料跑一會兒.xD 06/24 16:16