基于Java的多线程客户端socket
在大多数Java客户机/服务器示例中,它们使用ServerSocket。accept()方法从客户端接收消息。此方法阻止线程。这看起来不错,因为服务器不会做无用的工作,可以立即响应。但在客户端,他们使用如下无限循环:
BufferedReader in = new BufferedReader (new InputStreamReader (socket.getInputStream ()));
while (true)
{
String cominginText = "";
try
{
cominginText = in.readLine ();
System.out.println (cominginText);
}
catch (IOException e)
{
//error ("System: " + "Connection to server lost!");
System.exit (1);
break;
}
}
这看起来很糟糕,因为在我看来,客户做的是无用的工作。 是否有某种方法可以在客户端接收消息,而不做无用的工作,并且立即像在服务器端一样(可能是应该使用侦听器吗?)
“你所说的无用工作是什么意思?——布拉吉31分钟前”
例如,按下“签入循环”按钮(我们应该使用listener)
while (!button.isPressed() ) { }
是一种糟糕的方式
# 1 楼答案
in.readLine()
块。直到字符串返回,循环才会继续