首页 > 解决方案 > My Server-Client Messenger Doesn't Seem To Be Sending/Recieving Messages - Java

问题描述

I have made tried to make a client server messenger using sockets, but it seems to not be sending/recieving messages. I am using a BufferedWriter and BufferedReader if that helps at all. Everytime I run both of them, it seems to be connecting, but the textArea is completely empty when I send a message. I have a console version that doesn't hava a GUI and that doesn't have any problems. Here is the code server side:

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));
    }
    }

And since I am not sure what side the problem is on or if it is on both here is the client code:

    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);
        });
    }
        }

标签: javasocketsbufferedreaderserversocketbufferedwriter

解决方案


推荐阅读