在c#getingError中,无法访问已处理的对象对象名称=';System.Net.Socket.Socket

本文关键字:对象 Socket Net System c#getingError 处理 访问 | 更新日期: 2023-09-27 18:28:47

我想要一个C#客户端和Java服务器中的聊天应用程序

我浏览了C#客户端,但当我响应Java服务器时出现了一些错误,我得到了错误@

无法访问已释放的对象对象name="System.Net.Socket.Socket"

class Program
{
    static void Main(string[] args)
    {
        byte[] bytes = new byte[1024];// data buffer for incoming data
        // connect to a Remote device
        try
        {
            // Establish the remote end point for the socket
            IPHostEntry ipHost = Dns.Resolve("localhost");
           IPAddress ipAddr = ipHost.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 95);
            Socket Socketsender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // Connect the socket to the remote endpoint
            Socketsender.Connect(ipEndPoint);
            Console.WriteLine("'n'n___________________Client Server Chat Application__________________________");
            Console.WriteLine("___________________________________________________________________________");
            Console.WriteLine("'nSocket Connecting To Java Server...." + Socketsender.RemoteEndPoint.ToString());
           // Console.ReadLine();
            string data = null;
            while (true) 
            {
                //Recieved from Java Server Message
                int bytesRec = Socketsender.Receive(bytes);
                Console.WriteLine("'nJava Server:: {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));
              //  Console.ReadLine();
                    Console.Write("C# Client  ::"); // Prompt
                    string line = Console.ReadLine();
                    byte[] sendToServer = Encoding.ASCII.GetBytes(line);
                    // Send the data through the socket
                    int intByteSend = Socketsender.Send(sendToServer);
               //  Socketsender.Shutdown(SocketShutdown.Both);
                Socketsender.Close();
                               Console.WriteLine("____________________________________________________________________________");
                Console.WriteLine("_________________________End Chat___________________________________________");                  
                // Socketsender.Shutdown(SocketShutdown.Both);
              Socketsender.Close();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        Console.ReadLine();
    }

}

在c#getingError中,无法访问已处理的对象对象名称=';System.Net.Socket.Socket

在while循环中关闭套接字(Socketsender),然后在下一次迭代中调用它上的Receive

一旦插座闭合,它就死了,1,不能用于任何用途。您需要创建一个新的套接字并将其连接到服务器。

或者更好的是,保持第一个插座打开。

(你也执行了两次关闭,但我认为这是一个转录错误。)


1在此处插入死鹦鹉。