gpt4 book ai didi

java - 一些java Datagram Socket问题

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:24 25 4
gpt4 key购买 nike

我最近深入研究了使用 java 的套接字编程,我有一些一般性的问题。

有一个 bind() 方法,以及一个 connect() 和 disconnect()。没有解除绑定(bind)()。这是因为断开连接后套接字未绑定(bind)吗?一旦程序退出,垃圾收集会处理这个问题吗?或者这甚至不是一个有效的问题?

此外,在创建 DatagramSocket 时,如果我只提供端口和地址有什么不同?我正在创建一个程序来收集网络外的数据,因为数据四处流动并记录下来。我应该只使用本地地址吗?无法在创建套接字时使用地址导致我无法收集数据包?

我只是想更深入地了解这些东西的内部运作方式。

最佳答案

里面大约有 15 个独立的问题,但我会尽力解决它们:

There is a bind() method, as well as a connect() and disconnect(). There is no unbind(). Is this because upon disconnecting the socket is unbound?

bind()connect()disconnect() 是分开的。 Bind 用于将套接字绑定(bind)到特定端口——有效地“监听”连接,而 connect() 用于打开与已在特定端口上监听的套接字的连接。 unbind() 等价于 close()

Does garbage collection take care of this once the program exits? Or is this not even a valid question?

这是一个完全有效的问题,尽管垃圾收集是一种用于内存管理的技术,而不是套接字/操作系统资源管理。如果您不释放特定端口,它会一直与您的应用程序相关联,直到您的应用程序终止,然后它会被操作系统回收。这是操作系统级别的功能,而不是 JVM 功能等。

Also, upon creating a DatagramSocket, how is it different if I only provide the port or provide the port and the address?

有时,您必须提供您希望连接或绑定(bind)的互联网地址和端口或套接字。没有办法解决它。

I am creating a program to collect data off a network, as the data floats around and log it. Should I just use the local address? Could not using the address when I create the socket cause me to not be able to collect packets?

我不确定你在这里问什么,你是在谈论记录网络上的所有数据包,也就是嗅探器?这需要的不仅仅是简单的数据报编程。实际上,您必须在网络适配器级别注入(inject)自己,以便在离线读取数据包时拦截它们。你所说的只会让你收到发送到你正在收听的特定端口的数据包。

关于java - 一些java Datagram Socket问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6361741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com