-3

破棄されたオブジェクトにアクセスできないという問題を修正しました。C#クライアントとサーバーで

私が使用した次のポイント。

  • スコープの制限に使用
  • 私はクローズドソケットオブジェクトではありません

class Client { static void Main(string[] args) { Console.Title = "クライアント チャット"; byte[] bytes = new byte[1024];// 着信データ文字列のデータ バッファー data = null;

        // 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);
            using (Socket Socketsender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
            {
                Socketsender.Connect(ipEndPoint);


                Console.WriteLine("\n\n\tSocket Connecting To Java Server...." + Socketsender.RemoteEndPoint.ToString());                                   

                while (true)
                {
                    Console.Write("\n\n\tClient::");
                    string theMessage = Console.ReadLine();
                    byte[] msg = Encoding.ASCII.GetBytes(theMessage);
                    // Send the data through the socket


                    int bytesSent = Socketsender.Send(msg);
                    //Recieved from Java Server Message
                    int bytesRec = Socketsender.Receive(bytes);
                    Console.WriteLine("\n\n\tJava Server Says:: {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));              

                }
                //Socketsender.Close();

            }

        }

        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

        Console.ReadLine();
    }


}
4

1 に答える 1

2

ループの外側で Socket ハンドラー オブジェクトを作成し、ループの内側で閉じます。ループの 2 番目のパスでは、既に閉じている Socket オブジェクトを見ています。
終了するまでソケットを閉じないでください。

于 2013-08-28T11:10:48.277 に答える