java线程无限循环,套接字编程
我在线程运行方法中有关无限循环中套接字输出流刷新机制的一个问题。 我的代码工作,当客户端套接字发送消息到服务器和运行方法在服务器,运行在'无限循环',通过readLine()
方法接收消息。 在无限'while'循环中运行时在服务器端接收数据的工作正常,但是当它向客户端消息发送消息(如返回消息以进行确认)后,在使用write()
和flush()
方法后无法工作,它包含在同一个无限'while'循环中。
我很努力地为这个问题找到解决方案,并且我发现有趣的思想,当服务器端的无限'while'循环停止运行时,服务器刷新到客户端的所有消息都开始发送到客户端。 所以我认为这是队列和线程无限循环的问题,不会让消息被冲洗到另一端,直到无限循环结束以确保安全。 所以我创建了另一个带线程的类,用于发送服务器消息给客户端。它似乎正在工作,因为在刷新消息之后,run方法结束了。但是,每次向客户端发送消息时,我都必须创建该类。
以下是使用与原始代码相同的概念的示例代码,运行在单独的主要方法上
客户端:
try {
// System.out.println("client_working!!") ;
while (true) {
writer.write("rkdgusdnr");
writer.flush();
// writer.flush();
System.out.println("client_Working!!");
sleep(500);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
reader.close();
writer.close();
client.close();
JOptionPane.showMessageDialog(null, "client closed!!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
服务器端:
try {
client = server.accept();
reader = new BufferedReader(new InputStreamReader(
client.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(
client.getOutputStream()));
String contents = null;
while (true) {
// System.out.println("Server_received") ;
if ((contents = reader.readLine()) != null) {
System.out.println(contents + "n");
writer.write("Server_received");
writer.flush();
} else {
break;
}
System.out.println("Server_working!!");
sleep(500);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
reader.close();
writer.close();
client.close();
server.close();
JOptionPane.showMessageDialog(null, "server closed!!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
你在读线条,但你并没有写出线条。 你需要发送一个行结束符。
链接地址: http://www.djcxy.com/p/64453.html