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 为什么要绑插座_Java_Sockets - Fatal编程技术网

Java 为什么要绑插座

Java 为什么要绑插座,java,sockets,Java,Sockets,我在这里搜索了一下,找到了一篇类似的文章,但我并没有真正得到我想要的答案。我正在通过一些示例和一些伪逆向工程学习Java网络。Oracle的文档也很有帮助,但我有几个问题 为什么要将IP地址绑定到套接字?有必要吗?你什么时候用这种装订 以下是向我提出问题的部分代码: ServerSocket myServerSocket = new ServerSocket(1337); System.out.println("Server is waiting for an incoming connecti

我在这里搜索了一下,找到了一篇类似的文章,但我并没有真正得到我想要的答案。我正在通过一些示例和一些伪逆向工程学习Java网络。Oracle的文档也很有帮助,但我有几个问题

为什么要将IP地址绑定到
套接字
?有必要吗?你什么时候用这种装订

以下是向我提出问题的部分代码:

ServerSocket myServerSocket = new ServerSocket(1337);
System.out.println("Server is waiting for an incoming connection from client...");
Socket recievingSocket = myServerSocket.accept();

现在,据我所知,如果我要绑定一个套接字,它将在运行
accept()
正确吗?

将套接字绑定到一个地址,以限制套接字将侦听的位置。如果您想让它使用默认行为(IIRC要监听任何行为),则不需要这样做


您应该在使用accept之前绑定,因为accept告诉套接字开始侦听套接字,而bind告诉它在哪里查找。套接字在侦听之前需要知道在哪里查找。

套接字本质上是=IP+端口。

是的,你需要一个IP地址来创建一个套接字。这个过程被称为绑定,因为您可以将多个端口绑定到同一个地址,所有端口都监听它们各自的传入连接

以上几乎总结了您的问题,即是否有必要,但要添加另一点——假设您创建了一个客户端来连接到服务器。如果不知道服务器IP地址和要连接的端口,它将如何连接

为什么要将IP地址绑定到套接字

确定它将通过哪个出站接口连接

有必要吗

理论上,不是。在实践中,通过VPN连接时有时需要它

从我的理解来看,如果我要绑定一个套接字,那么它就在运行accept()之后,对吗

不对。接受或连接的
套接字已绑定。绑定
套接字的唯一方法是:

  • 使用不带参数的
    new Socket()
    创建它,然后调用
    bind(),
  • 使用四参数构造函数创建它,其中前两个参数是目标地址,后两个是绑定地址

  • bind()
    的主要用途是与
    ServerSocket
    结合使用。例如,在您的示例中,调用
    newserversocket(1337)
    创建一个套接字,将其绑定到0.0.0.0:1337,并将其置于侦听状态。

    根据定义,套接字是IP地址和端口。你可能会发现读一些好书很有用。这两样东西其实是一样的。地址:端口组合通常只对一个套接字可用。谢谢大家。这是最有用的信息!=)任何一个都不能回答这个问题,而开始“进程被称为绑定”的部分基本上是没有意义的。因此,在服务器bind()的情况下,它基本上是内置在构造函数中的?我的意思是,假设我使用了一个没有参数的构造函数(假设定义了一个),那么我必须调用bind(),是吗?