每个人都知道java中的套接字编程。我们编写如下代码:
ServerSocket serverSocket = new ServerSocket(1234);
Socket server = serverSocket.accept();
我们知道我们创建了serverSocket的对象,然后我们编写serverSocket.accept();
代码来接收客户端请求。我们知道serverSocket.accept();
等到新请求到来。
但我的问题是:serverSocket.accept();
方法在内部做了什么?可能是在while循环中运行?服务器如何识别任何新请求的服务? serverSocket.accept();
方法的内部含义是什么?任何人都有这个想法吗?
答案 0 :(得分:1)
在Linux上,ServerSocket.accept()
最终(在本机代码中)执行accept
系统调用(请参阅man 2 accept
),它阻止等待合适的传入连接。
Java代码或本机代码中没有while
循环。我不知道在Linux内核中发生了什么,但在那时,这不再是一个Java问题了。
这可能适用于Windows上的Java,以及C#或您关注的任何其他编程语言。
答案 1 :(得分:0)
您可以自己找到。
public Socket accept() throws IOException {
if (isClosed())
throw new SocketException("Socket is closed");
if (!isBound())
throw new SocketException("Socket is not bound yet");
Socket s = new Socket((SocketImpl) null);
implAccept(s);
return s;
}
accept()如何运作?