java - 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);
});
}
}
解决方案
推荐阅读
- regex - 尝试编写一个正则表达式,以匹配以 ```Volume[WD__dss``` 开头的任何内容
- c++ - 如何在 C++ 中向文件中添加多行?
- go - 将 `go mod vendor` 添加到预提交挂钩是否有意义?
- java - API 问题:无法反序列化实例...超出 START_OBJECT 令牌\n
- react-native - 在 React Native 中使用 react-navigation 的堆栈跟踪不显示位置
- karate - 在单个场景大纲中匹配多个响应
- c# - 是否有 C# 速记来创建包含类型的新实例?
- reactjs - 我的表单没有提交所以问题出在哪里
- javascript - 在 Angular 中测试 *ngFor 和 FormGroup 中调用的函数?
- java - 如何编写一个等待我在 Android 中输入的 while 循环?(解决了)