系统.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。知道我该怎么解决它或者原因是什么吗?

系统.c#中TCP套接字中的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();
 }
相关文章:
  • 没有找到相关文章