Bru*_*oLM 2 c# connection tcplistener tcpclient
我正在尝试从a读取数据,以下TcpClient是我的工作方式:
var client = tcpListener.AcceptTcpClient();
var data = new byte[client.ReceiveBufferSize];
StringBuilder dataString = new StringBuilder();
using (var ns = client.GetStream())
{
while (ns.Read(data, 0, client.ReceiveBufferSize) != 0)
{
dataString.Append(Encoding.UTF8.GetString(data));
}
}
client.Close();
Run Code Online (Sandbox Code Playgroud)
问题是我的字符串长度不是8192(这是值client.ReceiveBufferSize),因此我\0在StringBuilder中附加了很多.
我怎样才能获得确切的数据量?
int readCount;
while ((readCount = ns.Read(data, 0, client.ReceiveBufferSize)) != 0)
{
dataString.Append(Encoding.UTF8.GetString(data, 0, readCount));
}
Run Code Online (Sandbox Code Playgroud)
编辑:
正如mg30rg在评论中指出的那样,这种方法容易受到连接然后立即断开连接的客户端的影响.最好DataAvailable在打电话前检查房产Read(); 否则线程会明显无限制地阻塞.
此外,该Connected属性将明显恢复true,直到Read()或者Write()被调用,所以你将不能够通过使用属性来检测这种情况.
| 归档时间: |
|
| 查看次数: |
8846 次 |
| 最近记录: |