首页 > 解决方案 > 套接字崩溃线程

问题描述

问题:

我的@Override run()方法是实现 Runnable 的类的一部分,它像往常一样被不断调用。但是,在我打开套接字连接的那一刻,该线程似乎停止了,没有抛出任何错误。如果我将客户端连接到服务器套接字,它工作得很好,但是该@Override run()方法正在勾选的 GUI 只是停止工作

运行方法:

@Override
public void run()
{

}

服务器套接字(停止调用 run() 方法):

public class CommonProxy
{

    public static boolean isActive = false;

    public static void startServer() throws IOException
    {
        isActive = true;

        Socket socket;

        OutputStreamWriter outputStreamWriter;
        InputStreamReader inputStreamReader;

        BufferedWriter bufferedWriter;
        BufferedReader bufferedReader;

        ServerSocket serverSocket;

        serverSocket = new ServerSocket(1234);

        while (isActive)
        {
            try
            {
                socket = serverSocket.accept();
                System.out.println("hi");

                outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
                inputStreamReader = new InputStreamReader(socket.getInputStream());

                bufferedWriter = new BufferedWriter(outputStreamWriter);
                bufferedReader = new BufferedReader(inputStreamReader);

                while (isActive)
                {
                    String clientMessage = bufferedReader.readLine();

                    System.out.println("[Client]: " + clientMessage);

                    bufferedWriter.write("Message Recieved");
                    bufferedWriter.newLine();
                    bufferedWriter.flush();

                    if (clientMessage.equalsIgnoreCase("exit"))
                    {
                        System.out.println("Client Disconnected");
                        break;
                    }
                }

                socket.close();
                inputStreamReader.close();
                outputStreamWriter.close();
                bufferedReader.close();
                bufferedWriter.close();
            } catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }

}

如果需要,客户端套接字(也停止调用该方法):

    public static void startClient(String address, int port)
    {
        isActive = true;

        Socket socket = null;

        OutputStreamWriter outputStreamWriter = null;
        InputStreamReader inputStreamReader = null;

        BufferedWriter bufferedWriter = null;
        BufferedReader bufferedReader = null;

        try
        {
            socket = new Socket("192.168.0.100", 1234);
            System.out.println(socket.getLocalAddress().getHostAddress());

            outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
            inputStreamReader = new InputStreamReader(socket.getInputStream());

            bufferedWriter = new BufferedWriter(outputStreamWriter);
            bufferedReader = new BufferedReader(inputStreamReader);

            Scanner scanner = new Scanner(System.in);

            while (isActive)
            {
                String queuedMessage = scanner.nextLine();

                bufferedWriter.write(queuedMessage);
                bufferedWriter.newLine();
                bufferedWriter.flush();

                System.out.println(bufferedReader.readLine());

                if (queuedMessage.equalsIgnoreCase("exit"))
                    break;
            }
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if (socket != null) socket.close();
                if (inputStreamReader != null) inputStreamReader.close();
                if (outputStreamWriter != null) outputStreamWriter.close();
                if (bufferedReader != null) bufferedReader.close();
                if (bufferedWriter != null) bufferedWriter.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }

    public static void queueMessage(String message)
    {
        queuedMessage = message;
    }

    public static String getMessage()
    {
        return lastServerMessage;
    }

标签: javasocketsrunnable

解决方案


推荐阅读