如何:TcpClient NetworkStream 生命周期
How to: TcpClient NetworkStream Lifecycle
我有一个 ASP.NET CORE MVC Web 应用程序需要与 TcpServer 通信以完成某些任务。我在 Web 应用程序上有一个 class 来管理对此 TcpServer 的请求。
我的 Tcp 客户端 class 包含一个名为 Request(string message) 的方法,我的 ASP.Net Web 应用程序使用它来调用 TcpServer 和 returns TcpServer 的回复。方法是这样的:
public string Request(string message)
{
// Open stream and client.
TcpClient client = new TcpClient(this._ipAddr, this._port);
NetworkStream stream = client.GetStream();
// Write to stream
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
// Read from stream to get response. Read 256 bytes at a time so
// as not to overload the system in case requests are ginormous.
Byte[p] data = new Byte[256];
string responseData = "";
int bytesRead;
while ( (bytesRead = stream.Read(data, 0, 256)) > 0)
{
responseData += System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);
}
// Close stream and client
stream.Close();
client.Close();
return responseData;
}
请注意,我在应用程序中多次调用此方法。所以我不断更新(并因此连接)并关闭 TcpClient 和 NetworkStream。
我查看了 MSDN 文档和堆栈溢出。我看到的所有示例只发送一个请求。这并没有真正帮助我,因为我将在 Web 应用程序的整个生命周期中多次发送请求。这将是一个非常频繁的请求。我想了解如何管理它。
我是 TCP 服务器和客户端的新手。什么是正确的生命周期?使用 TcpClient 和 NetworkStream 的正确方法是什么?
更具体地说,我应该在每次请求时更新并关闭 TcpClient 吗?或者 TcpClient 应该是一个在我的网络应用程序的整个生命周期中都打开的单例...在这种情况下,我假设流是我应该为每个请求打开和关闭的。
您不需要频繁打开和关闭套接字,只需打开一次并在您想停止与该 TCP 服务器通信时关闭它,但您需要通过定义一个指示结束的模式来修改您的 TCP 服务器的响应,因此当您阅读该模式时,您知道响应已完成。
关于性能问题,这 returns 您对该连接的使用情况,如果您确定您的频道是安全的并且您有足够的资源,那么最好保持它打开。然而;如果您不经常使用它,则可以每次打开和关闭它。
我有一个 ASP.NET CORE MVC Web 应用程序需要与 TcpServer 通信以完成某些任务。我在 Web 应用程序上有一个 class 来管理对此 TcpServer 的请求。
我的 Tcp 客户端 class 包含一个名为 Request(string message) 的方法,我的 ASP.Net Web 应用程序使用它来调用 TcpServer 和 returns TcpServer 的回复。方法是这样的:
public string Request(string message)
{
// Open stream and client.
TcpClient client = new TcpClient(this._ipAddr, this._port);
NetworkStream stream = client.GetStream();
// Write to stream
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
// Read from stream to get response. Read 256 bytes at a time so
// as not to overload the system in case requests are ginormous.
Byte[p] data = new Byte[256];
string responseData = "";
int bytesRead;
while ( (bytesRead = stream.Read(data, 0, 256)) > 0)
{
responseData += System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);
}
// Close stream and client
stream.Close();
client.Close();
return responseData;
}
请注意,我在应用程序中多次调用此方法。所以我不断更新(并因此连接)并关闭 TcpClient 和 NetworkStream。
我查看了 MSDN 文档和堆栈溢出。我看到的所有示例只发送一个请求。这并没有真正帮助我,因为我将在 Web 应用程序的整个生命周期中多次发送请求。这将是一个非常频繁的请求。我想了解如何管理它。
我是 TCP 服务器和客户端的新手。什么是正确的生命周期?使用 TcpClient 和 NetworkStream 的正确方法是什么?
更具体地说,我应该在每次请求时更新并关闭 TcpClient 吗?或者 TcpClient 应该是一个在我的网络应用程序的整个生命周期中都打开的单例...在这种情况下,我假设流是我应该为每个请求打开和关闭的。
您不需要频繁打开和关闭套接字,只需打开一次并在您想停止与该 TCP 服务器通信时关闭它,但您需要通过定义一个指示结束的模式来修改您的 TCP 服务器的响应,因此当您阅读该模式时,您知道响应已完成。
关于性能问题,这 returns 您对该连接的使用情况,如果您确定您的频道是安全的并且您有足够的资源,那么最好保持它打开。然而;如果您不经常使用它,则可以每次打开和关闭它。