为什么要绑定套接字

时间:2014-02-03 04:43:56

标签: java sockets

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

为什么要将IP地址绑定到Socket?有必要吗?你何时会使用所述绑定?

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

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

现在根据我的理解,如果我要绑定一个Socket,它会在运行accept()后正确吗?

3 个答案:

答案 0 :(得分:2)

  

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

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

  

有必要吗?

理论上,没有。实际上,有时在通过VPN连接时需要它。

  

现在根据我的理解,如果我要绑定一个Socket,它会在运行的accept()之后正确吗?

不正确的。已接受或已连接Socket已绑定。绑定Socket的唯一方法是:

  1. 使用不带参数的new Socket()创建它,然后调用bind(),
  2. 使用四参数构造函数创建它,其中前两个参数是目标地址,后两个是bind-address。
  3. bind()的主要用途是与ServerSocket一起使用。例如,在您的示例中,调用new ServerSocket(1337)创建一个套接字,将其绑定到0.0.0.0:1337,并将其置于LISTEN状态。

答案 1 :(得分:0)

将套接字绑定到地址,以限制套接字将要侦听的位置。如果您希望它使用默认行为,则无需使用,IIRC将听取任何内容。

你会在使用accept之前绑定,因为accept告诉套接字开始侦听套接字,但bind告诉它在哪里查看。套接字需要知道在侦听之前要查看的位置。

答案 2 :(得分:0)

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

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

以上几乎总结了你的问题是否有必要,但增加另一点 - 让我们说你创建一个客户端连接到你的服务器。如果不知道它要连接的服务器IP地址和端口,它将如何连接。