繁体   English   中英

Java上的客户端套接字

[英]Client Socket on Java

在大多数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;
    }
}

这看起来很糟糕,因为在我看来客户没有做任何工作。 是否有某种方法可以在客户端接收消息而无需做无用的工作,而立即像在服务器端一样(可能应该使用侦听器?)

“您所说的无用工作是什么意思?– Braj 31分钟前”

例如检查循环是否按下按钮(我们应该使用监听器)

while (!button.isPressed() ) { }是不好的方法。

in.readLine()块。 直到字符串返回,循环才会继续

由于套接字处于阻塞模式,因此这里没有“无用的工作”,但是有:

  1. “ comingText”的无意义初始化。
  2. 无法检查它是否为空,因此它将在EOS上无意识地旋转。
  3. IOExceptions的错误处理:并非所有致命错误,例如SocketTimeoutException,并且它们都不应该立即导致System.exit()。
  4. 读取的行被丢弃,这是应用程序协议错误。

因此,这绝对是错误的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM