看板 C_Sharp 關於我們 聯絡資訊
小弟剛開始接觸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
Harper34:CanRead只代表能讀取 有資料是DataAvailable 那範例寫錯 10/17 11:10