在c#中获取错误无法访问已处置的对象对象名称='System.Net.Socket.Socket'

时间:2013-08-24 09:53:05

标签: c# java

我想在C#Client和Java Server中使用聊天应用程序

我通过C#Client但是当我响应Java Server时遇到了一些错误我得到错误@

  

无法访问已处置的对象名称='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();
    }


}

1 个答案:

答案 0 :(得分:3)

你正在关闭你的套接字(Socketsender),然后在下一次迭代中调用Receive

一旦套接字关闭它就死了, 1 并且不能用于任何事情。您需要创建一个新套接字并将其连接到服务器。

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

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


1 在这里插入死鹦鹉。