[問題] 非同步模式TCP連線
最近在實作一些小程式
目的是透過非同步連線來接收條碼機掃過的條碼資訊
然後將結果印出在label上
參考了這篇文章
http://renjin.blogspot.tw/2009/02/asynchronous-tcp-client-using-c.html
照著修改自己的需求後已經能夠接收到值
但是接回來的值處理上有點問題不知該如何解決
文章寫到的state.data 是stringbuilder 所以用append來加入收到的data
但是這樣就會變成data一直累加在後面,沒辦法只顯示最新的一筆
比如說第一筆aaaaaaaaaa 第二筆bbbbbbbbbb 第三筆cccccccccc
就會變成 aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa
bbbbbbbbbb bbbbbbbbbb 這樣
cccccccccc
試著用state.data.insert來加入,抓取的位置又會跑掉
也嘗試把state.data改成用string的型態來接收值
會變成沒有辦法把結果印在label上
自己覺得問題是在EndReadCallback裡,但是嘗試了好久不知道問題在哪
想請問問題大概在哪呢?
對於C#還不是很熟悉,只能照著文章範例稍微理解修改
希望有人能夠解惑~~先感謝了
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.205.148.193
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1468944541.A.6FD.html
→
07/20 15:02, , 1F
07/20 15:02, 1F
→
07/21 00:04, , 2F
07/21 00:04, 2F
→
07/21 00:05, , 3F
07/21 00:05, 3F
→
07/21 00:06, , 4F
07/21 00:06, 4F
private void EndReadCallback(IAsyncResult ar)
{
StateObject state = (StateObject)ar.AsyncState;
TcpClient client = state.Client;
NetworkStream stream = client.GetStream();
int bytesRead = stream.EndRead(ar);
if (bytesRead > 0)
{
state.Data.Append(Encoding.UTF8.GetString(state.Buffer, 0,
bytesRead));
stream.BeginRead(state.Buffer, 0, state.BufferSize,
new AsyncCallback(EndReadCallback), state);
}
else
{
client.Close();
DisplayResults(state.Data.ToString());
}
}
對這段有些疑問
條碼機一直傳值進來的話
就永遠都不會進到else裡的DisplayResults(state.Data.ToString())
所以我是把它移到
state.Data.Append(Encoding.UTF8.GetString(state.Buffer, 0,
bytesRead));的後面去
覺得怪怪的 不知道該如何修改
還是其實那篇文章和我想做的其實不太一樣@@
※ 編輯: atien666 (123.205.148.193), 07/21/2016 00:12:46
→
07/21 00:59, , 5F
07/21 00:59, 5F
→
07/21 01:01, , 6F
07/21 01:01, 6F
→
07/21 01:02, , 7F
07/21 01:02, 7F
→
07/21 01:03, , 8F
07/21 01:03, 8F
→
07/24 01:39, , 9F
07/24 01:39, 9F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章