0

私はこのコードを持っています:

    private void startServer()
    {
        new Thread(() => StartListening()).Start();
    }

    void StartListening()
    {
        serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        serverSocket.Bind(new IPEndPoint(0, serverPort));
        serverSocket.Listen(100);

        Accept();
    }

    void Accept()
    {
        while (true)
        {
            acceptedMessages = serverSocket.Accept();

            Buffer = new byte[acceptedMessages.SendBufferSize];
            int bytesRead = acceptedMessages.Receive(Buffer);

            byte[] formatted = new byte[bytesRead];

            for (int i = 0; i < bytesRead; i++)
            {
                formatted[i] = Buffer[i];
            }
            string command = Encoding.ASCII.GetString(formatted);
            string[] splittedCommand = command.Split(' ');

            jobsHistory.Items.Add(Encoding.ASCII.GetString(formatted));
            jobsHistory.Refresh();

            Process processToRun = new Process();
            processToRun.StartInfo.FileName = splittedCommand[0];
            processToRun.StartInfo.WorkingDirectory = Path.GetDirectoryName(splittedCommand[0]);
            processToRun.StartInfo.Arguments = "";
            for (int i = 1; i < splittedCommand.Length; i++)
            {
                processToRun.StartInfo.Arguments += " " + splittedCommand[i];
            }

            processToRun.Start();

            if (!isSocketConnected(serverSocket))
            {
                connectionStatusColor.BackColor = Color.Red;
                isConnected = false;
                startStopListnening.Text = "Listen";
                break;
            }

        }

        acceptedMessages.Shutdown(SocketShutdown.Both);

        // If you want to start listening again
        serverSocket.Shutdown(SocketShutdown.Both);
        startServer();
    }

クライアントが切断されたことをアプリケーションが検出したときに、ソケットを安全に閉じる方法を探してみました。

私はいくつかのものを見ましserverSocket.close()serverSocket.shutdown(SocketShutdown.Both);

しかし、クライアントが切断されるたびに、アプリがクラッシュします。

何か案は?

4

0 に答える 0