→ Litfal: 看你的敘述看不出是送出多送了,還是接收沒清空buff 07/20 15:02
→ atien666: 偵錯的時候看起來像buffer沒清空 07/21 00:04
→ atien666: 而且第一次接到值的時候都會被斷成只有10byte 07/21 00:05
→ atien666: 正常加上跳脫字元應該要有24byte 07/21 00:06
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
→ Litfal: 因為兩個的連線永遠沒中斷,你要自己檢查分隔符號 07/21 00:59
→ Litfal: UTF8.GetString後不要直接加入Data內,給一個string去接變 07/21 01:01
→ Litfal: 數字串,然後在那個字串裡面找分格符號 07/21 01:02
→ Litfal: 可以用 Split 方法去切 07/21 01:03
→ atien666: 後來是用斷行符號來判斷 感謝樓上了 07/24 01:39