我在这里搜索并发现了一篇类似的文章,但我并没有真正得到我正在寻找的答案。我正在通过一些例子和一些伪逆向工程来学习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()
后正确吗?
答案 0 :(得分:2)
为什么要将IP地址绑定到套接字?
确定它将通过哪个出站接口连接。
有必要吗?
理论上,没有。实际上,有时在通过VPN连接时需要它。
现在根据我的理解,如果我要绑定一个Socket,它会在运行的accept()之后正确吗?
不正确的。已接受或已连接Socket
已绑定。绑定Socket
的唯一方法是:
new Socket()
创建它,然后调用bind(),
或 bind()
的主要用途是与ServerSocket
一起使用。例如,在您的示例中,调用new ServerSocket(1337)
创建一个套接字,将其绑定到0.0.0.0:1337,并将其置于LISTEN状态。
答案 1 :(得分:0)
将套接字绑定到地址,以限制套接字将要侦听的位置。如果您希望它使用默认行为,则无需使用,IIRC将听取任何内容。
你会在使用accept之前绑定,因为accept告诉套接字开始侦听套接字,但bind告诉它在哪里查看。套接字需要知道在侦听之前要查看的位置。
答案 2 :(得分:0)
套接字基本上是= IP +端口。
所以是的,你需要一个IP地址来创建套接字。并且该过程被称为绑定,因为您可以将多个端口绑定到同一地址,并且全部监听它们各自的传入连接。
以上几乎总结了你的问题是否有必要,但增加另一点 - 让我们说你创建一个客户端连接到你的服务器。如果不知道它要连接的服务器IP地址和端口,它将如何连接。