我的服务器-客户端 Messenger 似乎没有发送/接收消息 - Java

时间:2021-07-30 07:48:18

标签: java sockets bufferedreader serversocket bufferedwriter

我曾尝试使用套接字制作客户端服务器信使,但它似乎没有发送/接收消息。如果有帮助,我正在使用 BufferedWriter 和 BufferedReader。每次我运行它们时,它似乎都在连接,但是当我发送消息时,textArea 完全为空。我有一个没有 GUI 并且没有任何问题的控制台版本。这是代码服务器端:

import javax.swing.*;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.atomic.AtomicInteger;

public class guiServer extends JFrame {
    private JButton sendButton;
    private JTextField messageField;
    private JPanel All;
    private JTextArea messageArea;
    private JScrollPane scroll;

    public guiServer() {
        AtomicInteger loop = new AtomicInteger(1);
        add(All);
        setTitle("MPE Messenger");
        setSize(400,500);
        scroll.setAutoscrolls(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        messageArea.setEditable(false);
        All.getRootPane().setDefaultButton(sendButton);

        Thread thread = new Thread(() -> {

            Socket socket = null;
            InputStreamReader inputStreamReader = null;
            OutputStreamWriter outputStreamWriter = null;
            BufferedReader bufferedReader = null;
            BufferedWriter bufferedWriter = null;
            ServerSocket serverSocket = null;

            
            try {
                serverSocket = new ServerSocket(6660);
                while(true) {
                    socket = serverSocket.accept();
                inputStreamReader = new InputStreamReader(socket.getInputStream());
                outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());

                bufferedReader = new BufferedReader(inputStreamReader);
                bufferedWriter = new BufferedWriter(outputStreamWriter);
                    String messageFromClient = bufferedReader.readLine();
                    System.out.println("Client:" + messageFromClient);
                    if(messageFromClient.equalsIgnoreCase("BYE"))
                        break;
                    while(loop.get()==1){
                        bufferedWriter.write(messageField.getText());
                        bufferedWriter.newLine();
                        bufferedWriter.flush();
                        messageField.setText("");
                        loop.set(2);
                    }
                    socket.close();
                    outputStreamWriter.close();
                    inputStreamReader.close();
                    bufferedReader.close();
                    bufferedWriter.close();
                }



            }catch (IOException ioException) {
                ioException.printStackTrace();
            }




            });
        thread.start();
        sendButton.addActionListener(e -> loop.set(1));
    }
    }

而且由于我不确定问题出在哪一边,或者两者都出问题,因此这里是客户端代码:

    import javax.swing.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.*;
    import java.net.Socket;
    import java.util.concurrent.atomic.AtomicInteger;

    public class GUIClient extends JFrame {
        private JTextField messageField;
        private JButton sendButton;
        private JTextArea messageArea;
        private JScrollPane scroll;
        private JPanel All;

    public GUIClient() {
        AtomicInteger loop = new AtomicInteger(1);
        add(All);
        setTitle("MPE Messenger");
        setSize(400, 500);
        scroll.setAutoscrolls(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        messageArea.setEditable(false);
        All.getRootPane().setDefaultButton(sendButton);
        Thread thread = new Thread(() -> {
            Socket socket = null;
            InputStreamReader inputStreamReader = null;
            OutputStreamWriter outputStreamWriter = null;
            BufferedReader bufferedReader = null;
            BufferedWriter bufferedWriter = null;


            try {

                socket = new Socket("localhost", 6660);

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

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

                bufferedWriter.write("Connected!!!");
                bufferedWriter.newLine();
                while (true) {
                    int atomicValue = loop.get();
                    String messageFromClient = bufferedReader.readLine();
                    messageArea.append("Server:" + messageFromClient + "\n");

                    while(loop.get()==1){
                        bufferedWriter.write(messageField.getText());
                        bufferedWriter.newLine();
                        bufferedWriter.flush();
                        messageField.setText("");
                        loop.set(2);
                    }
                }

            } catch (IOException ioException) {
                ioException.printStackTrace();
            }




        });
        thread.start();

        sendButton.addActionListener(e -> {
            loop.set(1);
        });
    }
        }

0 个答案:

没有答案