系统.c#中TCP套接字中的ObjectDisposedException
本文关键字:ObjectDisposedException 套接字 TCP 系统 | 更新日期: 2023-09-27 17:49:33
这是我的服务器:
class Server
{
static void Main(string[] args)
{
TcpListener listener = new TcpListener(IPAddress.Any, 5004);
listener.Start();
TcpClient client;
while (true)
{
client = listener.AcceptTcpClient();
if (client.Connected)
{
Console.WriteLine("client connected");
break;
}
}
NetworkStream sr = client.GetStream();
while (true)
{
byte[] message = new byte[1024];
sr.Read(message, 0, message.Length);
sr.Close();
Console.WriteLine(message.ToString());
}
}
}
这是我的客户:
class Program
{
static void Main(string[] args)
{
TcpClient client = new TcpClient();
Console.WriteLine("Insert server address");
string server = Console.ReadLine();
if (server == "")
{
server = "192.168.1.2";
}
client.Connect(IPAddress.Parse(server), 5004);
NetworkStream sw = client.GetStream();
while (true)
{
byte[] message = Encoding.ASCII.GetBytes(Console.ReadLine());
sw.Write(message, 0, message.Length);
sw.Close();
}
}
}
当我首先运行服务器和客户端时,一切都工作,并出现"客户端已连接"消息。问题是当我试图从客户端向服务器发送消息时,在sr.Read(message, 0, message.Length);
行中的服务器上引发System.ObjectDisposedException
。知道我该怎么解决它或者原因是什么吗?
在while循环中关闭了客户端和服务器端的流。将下面的Close
移到循环之外,或者更好的是,利用Close
调用Dispose的事实,这允许您使用IDisposable
接口功能,如using
:
using (NetworkStream sw = client.GetStream())
{
while (true)
{
byte[] message = Encoding.ASCII.GetBytes(Console.ReadLine());
sw.Write(message, 0, message.Length);
// Todo : Implement some kind of termination to the loop
}
sw.Flush();
}