![](/img/trans.png)
[英]ObjectOutputStream not sending data (server stuck at socket.accept())
[英]Stuck at socket.accept()
您好,我刚刚开始了Java Enterprise Edition类。 这是我第一次接触Java编程,因此对我而言这都是很新的。 我正在阅读我的教科书,并决定将其键入给我的一种代码进行尝试。 此代码不是我的。 程序应输出“你好,请输入BYE退出”,然后回显键入提示的所有内容。 由于某种原因,代码将挂在包含s.accept的try块上(它输出1,然后2挂起)。 我只是在想,如果有人从我的教科书中准确地复制了此书,为什么有人对此有什么见解呢? 这是代码:
import java.io.*;
import java.net.*;
import java.util.*;
public class EchoServer
{
public static void main (String[] args) throws IOException
{
System.out.println("1");
try (ServerSocket s = new ServerSocket(8189))
{
System.out.println("2");
try(Socket incoming = s.accept())
{
System.out.println("3");
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
try(Scanner in = new Scanner(inStream))
{
PrintWriter out = new PrintWriter(outStream,true);
out.println("Hello! Enter BYE to exit.");
boolean done = false;
while(!done && in.hasNextLine())
{
String line = in.nextLine();
out.println("Echo: " + line);
if(line.trim().equals("BYE"))
done = true;
}
}
}
}
}
}
我确定这是一个相对简单的解释,我对此很陌生,想知道为什么当我尝试运行它时它不起作用。
教科书中是否有相应的EchoClient
演示?
Socket.accept()
在设计上一直挂起,直到客户端连接到正在等待的端口(在本例中为端口8189)。您的程序运行正常
如果您阅读了文档,将会看到Socket.accept()实际上挂起了线程,直到客户端连接为止,因此在建立连接之后,它还将继续使用echo协议,因此您需要确保客户端在此连接中案例是支持回显协议的另一台服务器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.