Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ServerSocket';s方法接受()?_Java_Sockets_Serversocket - Fatal编程技术网

Java 如何使用ServerSocket';s方法接受()?

Java 如何使用ServerSocket';s方法接受()?,java,sockets,serversocket,Java,Sockets,Serversocket,在完成I/O流和并发之后,我决定学习Socket编程。到目前为止,我制作了一个简单的服务器客户端。但我有一个关于理解套接字对象实际上是如何生成的小问题。希望有人能给我一个简单的解释,因为我是新手 我遵循的基本规则是通过同时提供IP地址和端口号来创建套接字。所以我会做一些类似的事情: Socket s = new Socket(StringIP, intPort); 但我也遇到了一件让我困惑的事情,那就是使用ServerSocket类中的accept() Doc说它在建立连接后返回新套接字。很公

在完成
I/O流
并发
之后,我决定学习
Socket编程
。到目前为止,我制作了一个简单的服务器客户端。但我有一个关于理解套接字对象实际上是如何生成的小问题。希望有人能给我一个简单的解释,因为我是新手

我遵循的基本规则是通过同时提供IP地址端口号来创建
套接字
。所以我会做一些类似的事情:

Socket s = new Socket(StringIP, intPort);
但我也遇到了一件让我困惑的事情,那就是使用ServerSocket类中的
accept()

Doc说它在建立连接后返回新套接字。很公平。但是它如何知道客户端的端口和IP呢?这是否意味着变量套接字拥有关于客户端的所有数据(意味着在其IP和端口上)?如果是这样的话,它怎么知道它,而不是像我在第一个示例中所展示的那样手动将它放入构造函数?有人能告诉我我错过了什么,这样我就可以继续前进了吗

但是它如何知道客户端的端口和IP呢

客户端端口和IP位于网络数据包中。操作系统拾取并记录这些信息,并通过系统调用的结果(粗略地说)将其传递给Java。这一切都是在JVM本机代码中秘密完成的。(当然还有操作系统内核。)


如果您真的需要确切地了解这是如何发生的,那么在OpenJDK源代码(可免费下载)中就会非常清楚。但是你需要能够读取和搜索C和C++代码来解决它。

为什么你关心客户端的端口或IP?使用的端口与服务器套接字相同。如果你拥有IP,你会怎么做?@HovercraftFullOfEels-True,这个评论让我大开眼界。但从技术上讲,当用这种方式制作套接字时,它确实有自己的IP地址和端口,是吗?套接字是用于纯粹和简单的通信的。如果需要共享信息,则直接通过套接字传递需要共享的信息
ServerSocket myServer = new ServerSocket(portNum);
Socket socket = myServer.accept();