[問題] 請問非同步連線的問題

看板C_Sharp (C#)作者 (ya)時間11年前 (2013/10/16 17:03), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
小弟剛開始接觸Socket連線,並且正在嘗試非同步連線中,在程式碼部分主要是都是參考 http://renjin.blogspot.tw/2009/02/asynchronous-tcp-client-using-c.html 這個網站的寫法,而目前我主要遇到的問題部分的程式碼如下 public void SendData(IAsyncResult ar){ StateObject state = (StateObject)ar.AsyncState; TcpClient client = state.Client; try{ NetworkStream stream = client.GetStream(); stream.EndWrite(ar); if(stream.CanRead){ System.WriteLine(“1”); stream.BeginRead(myBuffer, 0, bufferSize, new AsyncCallback(ReadCallback), state); System.WriteLine(“3”); } }catch(Exception ex){ Debug.Log("Exception:"+ex); } } 在傳完資料後要再呼叫ReadCallback來讀Server端丟給我的東西,有時候可以讀取, 可是有時候卻無法讀取? 應該說當我傳特定的資料給公司的Server時,完全不會進入ReadCallback函式? 如我程式碼所寫我在呼叫的地方有標記顯示1和3,ReadCallback中會顯示2 正常執行時直接顯示1 2 3,然後就對封包進行處理,但傳特定資料時竟然只跑1 3 當然也沒有後續動作... 我的疑問是,既然if(stream.CanRead)都成立了,應該是代表有封包進來了? 那為什麼無法呼叫ReadCallback? 畢竟我每個丟資料的函式都是靠SendData()來寫,應該沒有甚麼格式不合的狀況吧? 我完全卡死在這邊了= = 拜託有沒有熟悉非同步連線的高手能釋義一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.249.2.10

10/17 11:10, , 1F
CanRead只代表能讀取 有資料是DataAvailable 那範例寫錯
10/17 11:10, 1F
文章代碼(AID): #1INbPWzU (C_Sharp)
文章代碼(AID): #1INbPWzU (C_Sharp)