0
我正在編寫一個C#客戶端來連接到Node.JS服務器。事情工作正常,但有一點接收功能停止工作。我能夠確定訪問客戶端收到的字符串是凍結線程。一些代碼摘錄:C#異步客戶端 - 訪問字符串凍結接收線程
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
byte[] byteData = new byte[2048];
... setup socket connection ...
socket.BeginReceive(byteData, 0, byteData.Length,
SocketFlags.None, new AsyncCallback(OnReceive), null);
private void OnReceive(IAsyncResult ar)
{
socket.EndReceive(ar);
stringData = Encoding.ASCII.GetString(byteData).Trim();
Console.WriteLine("Before string");
Console.WriteLine(stringData);
Console.WriteLine("After string");
// always ready to asynchronously receive
socket.BeginReceive(byteData, 0, byteData.Length,
SocketFlags.None, new AsyncCallback(OnReceive), null);
}
此輸出以下自收到時「OK」的Node.js:
Before string
OK
而且換行不,甚至連由控制檯寫的,因爲該系統輸出繼續直接在同一行上的'OK'後面。任何後續接收都不會顯示。我不知道可能是什麼原因造成的,我似乎無法找到其他人遇到這個問題。
是的,我確定它不是代碼的另一部分,因爲我使用了'git reset --hard HEAD',問題依然存在。這讓我懷疑Node.JS方面是否存在這個問題,但我不明白這會對客戶端造成怎樣的影響。 編輯:使用'bytesRead'修復它。我不知道爲什麼它以前,而不是現在,但我很感謝解決方案。 – BenJuan26
@ BenJuan26:很高興解決了你的問題。知道緩衝區內容是很有意思的。我的假設是轉換整個2048字符緩衝區導致一些字符導致輸出的長時間延遲。例如,如果您創建了一串2048'BEL'字符('chr(7)'),然後輸出它,計算機將執行2,048個單獨的嘟嘟聲。這需要很長時間。 。 。 –