gpt4 book ai didi

c# - 如何: TcpClient NetworkStream Lifecycle

转载 作者:行者123 更新时间:2023-12-05 06:25:55 25 4
gpt4 key购买 nike

我有一个 ASP.NET CORE MVC Web 应用程序需要与 TcpServer 通信以完成某些任务。我在管理对此 TcpServer 的请求的 Web 应用程序上有一个类。

我的 Tcp 客户端类包含一个名为 Request(string message) 的方法,我的 ASP.Net Web 应用程序使用它来调用 TcpServer 并返回 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 服务器响应,因此当您阅读该模式时,您就知道响应已完成。

关于性能问题,这又回到了你对那个连接的使用,如果你确定你的 channel 是安全的并且你有足够的资源那么肯定是保持它打开更好。然而;如果您不经常使用它,则可以每次打开和关闭它。

关于c# - 如何: TcpClient NetworkStream Lifecycle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56581912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com