在我的线程类中有一个用于向服务器发送信息的部分。我试图通过这样的套接字发送它:
PrintStream p = new PrintStream(sock.getOutputStream());
p.println(thread_name + "found : " + item);
在服务器端,我尝试使用InputStream
来获取信息:
ServerSocket s1 = new ServerSocket(portNumber);
System.out.println("Listening");*/
ArrayList<Socket> sockets_list = new ArrayList<Socket>();
ArrayList<Scanner> scanners_list = new ArrayList<Scanner>();
for (int i = 0; i < Thread_Count; i++) {
Socket news = s1.accept();
sockets_list.add(news);
Scanner newSc = new Scanner(sockets_list.get(i).getInputStream());
scanners_list.add(newSc);
System.out.println("socket added to server");
}
ArrayList<String> results = new ArrayList<String>();
for (Scanner scanner : scan_list) {
String res2 = "";
while (scanner.hasNext()) {
String res = scanner.next();
res2 += res + " ";
}
if (!res2.equals("")) {
results.add(res2);
}
}
for (String string : results) {
System.out.println(string);
}
当我执行此代码时,它只输出任何内容或只输出一个线程的信息。我该如何解决?
Ty for your advice
答案 0 :(得分:1)
取自docs from Scanner for hasNext():
此方法可能会在等待输入扫描时阻塞。
只要您的客户端仍然连接,您的hasNext()调用将被阻止,因为没有像文件中那样的已知结束(调用不会阻止)。
注意:这一行没用:
String res2 = "";
String是一个imutable,所以如果你重新分配它,它将创建一个全新的对象。相反,您应该使用StringBuilder / StringBuffer。