更新
我注意到它在Windows机器上工作正常,但在Mac上失败了。
我为套接字连接创建了一个基本的Java Server代码。它在AWS Linux AMI上运行,我从我的计算机建立客户端连接。它适用于客户端的前4-5个答案。但是,在第4或第5个答案之后,我没有从服务器得到任何响应,它只是挂起。过了一会儿,它给出了SocketTimeout异常。
我在两侧使用setSoTimeout()设置套接字超时,并且它没有改变任何内容。我想知道它是否与亚马逊有关。
客户代码:
public static void main(String[] args) {
final int portNumber = 9090;
String connected = "1";
System.out.println(WELCOME);
try {
Socket socket = new Socket("ip", portNumber);
socket.setSoTimeout(0);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader input = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out.println(connected);
while (connected.equals("1")) {
//read in situation
String situation = readInSituation(socket, input).replace(DELIMETER, "\n");
System.out.println(situation);
//send option
Scanner in = new Scanner(System.in);
System.out.print("Enter option: ");
out.println(in.nextLine());
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String readInSituation(Socket socket, BufferedReader input) throws Exception {
while (!input.ready()) {
Thread.sleep(200);
}
return input.readLine();
}
服务器代码更复杂,但它只是响应命令并在屏幕上打印基本文本。
由于
答案 0 :(得分:0)
不要在网络上使用PrintWriter
,因为它会吞下异常,很可能是之前的'连接重置'。使用BufferedWriter
。注意ready()
循环实际上是浪费时间。