在我的线程类中,有一个部分用于向服务器发送信息。我正在尝试通过这样的套接字发送它:
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);
}
当我执行这段代码时,它什么也不输出,或者只输出一个线程的信息。我该如何修复它?
请您给点建议
最佳答案
取自 docs from Scanner对于 hasNext():
This method may block while waiting for input to scan.
只要您的客户端仍然连接,您的 hasNext() 调用就会阻塞,因为没有像文件一样的已知结束(调用不会阻塞)。
注意:这一行没有用:
String res2 = "";
字符串是不可变的,所以如果你给它重新分配一些东西,它将创建一个全新的对象。相反,您应该使用 StringBuilder/StringBuffer。
关于java - 如何通过套接字将字符串从线程发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36946898/