【发布时间】:2016-09-25 03:16:48
【问题描述】:
我在通过线程读取和写入套接字时遇到问题。服务器使用 erlang,客户端使用 Java。我的做法是这样的:
PrintWriter printer = new PrintWriter(socket.getOutputStream(), true);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
TransmitterTwo trans = new TransmitterTwo(socket);
trans.start(); // Gets the message from socket
TransmitterTwo 类:
public class TransmitterTwo extends Thread {
Socket socket;
String message;
TransmitterTwo(Socket socket) {
this.socket = socket;
}
public String getMessageFromSocket() {
return message;
}
public void run() {
try {
String response = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while ((response = reader.readLine()) != null) {
System.out.println("Server response: "+ response);
this.message = response;
}
socket.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
问题出在主客户端类中。这个想法是:从控制台接收输入,将其发送到套接字,服务器处理逻辑并通过套接字发送响应。然后在这个客户端上,我检查响应并做我需要做的任何事情。这是一个注册流程,我注册,我收到“register_ok”,然后我登录……等等。我遇到问题的循环部分是这样的:
while(true) {
String readerInput = reader.readLine(); // Read from console
printer.println(readerInput.trim()); // Sends it to the socket
while(trans.message == null);
socketMessage = trans.message;
这是正确的方法吗?问题是'socketmessage'打印了之前收到的消息,就像..落后了一步,显然这是与线程相关的,但我无法弄清楚问题......帮助?谢谢
【问题讨论】:
标签: java multithreading sockets erlang