我曾尝试使用套接字制作客户端服务器信使,但它似乎没有发送/接收消息。如果有帮助,我正在使用 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);
});
}
}