编辑:我理解这个问题,但需要一个代码示例来说明如何解决它。
我希望我的客户端在断开连接后自动重新连接,但似乎TcpClient.Connected
不可靠。我已经读过你需要发送类的数据来改变那个标志。有没有更好的方法来处理问题?
//Method to handle reading data from buffer and deserializing
public static async Task<Message> ReadMessageAsync(this TcpClient client)
{
if (client.Connected && client.Available > 0)
{
int totalBytesRead = 0;
var data = new byte[client.Available];
while (totalBytesRead < client.Available)
{
totalBytesRead += await client.GetStream().ReadAsync(data, 0, client.Available);
}
return BinarySerializer.DeserializeMessage(data) as Message;
}
return null;
}
public async Task Start()
{
ConnectToServer();
while (_isRunning)
{
// Reconnect to server if needed.
if (!_tcpClient.Connected)
{
ConnectToServer();
}
// Wait for data
var data = await _tcpClient.ReadMessageAsync();
HandleData(data);
}
}
答案 0 :(得分:0)
TCP是一种非常强大的协议,允许强大的编程。对于客户端,您不需要依赖网络接口的低级信令,协议/语言提供您所需要的一切(除非您的客户端对时间要求严格,需要立即通知网络故障):
正在连接:
接收: