- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我最近深入研究了使用 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/
这里是两个人进行通信。是根据ip来判断的,xp与xp之间没有问题,我win7和xp有问题(已解决 关闭防火墙,如果是内网 网段要一致) 复制代码代码如下: impor
This question already has answers here: Why changing value of SO_RCVBUF doesn't work? (2个答案) 9个月前关闭。
我最近深入研究了使用 java 的套接字编程,我有一些一般性的问题。 有一个 bind() 方法,以及一个 connect() 和 disconnect()。没有解除绑定(bind)()。这是因为断开
我正在使用 QUdpSocket 从服务器接收数据。当我使用 SFML 接收数据时,我可以通过 SocketUdp 接收数据,但是使用 qt 它不起作用。 void TheClass::Bind()
Sockets are full-duplex communication channels between processes either local to the same host machi
我有一个在发送方和接收方上运行的应用程序,使用 UDP 协议(protocol)。 UDP 缓冲区大小约为 70 或 1024 字节,因此不会发生 UDP 碎片。 从 ifconfig/sar 级别,
我正在使用连接在 10G 以太网链路上的专用硬件。我有一些关于处理传入数据报的问题,如下: 如果 NIC 发现不正确的链路级以太网 CRC 会怎样?一些搜索表明错误可能不会被可靠地报告(例如 here
“流类型”套接字和“数据报”套接字类型有什么区别? 最佳答案 简短的回答:消息边界和连接。 使用流套接字,您可以写入两条 5 字节消息并最终读取一条 10 字节消息。这是因为您写入的数据只是放入单个流
在 Linux、Ubuntu 14.04 中:我正在编写一个实现套接字的代码来发送纯 UDP 数据报,其中包括 UDP header +有效负载,没有 IP header 的任何部分。 我已经创建了套
我读到应该在 Buffer 类上使用 ByteBuffer (java.nio) 来读取数据,因为它更高效 (?)。我的问题围绕着一个 UDP 客户端,它从多播地址读取数据包并将它们处理成原始对象。从
在 Netty 4 中,没有 Nio/Epoll/DatagramServerChannel 实现,因此无法创建监听 UDP 连接的 ServerBootstrap。 所以,基本上我的问题如下:为什么
这个问题NOT是关于STREAM类型和DATAGRAM类型INTERNET套接字的区别。我知道 STREAM 套接字使用 TCP,数据报套接字使用 UDP 以及所有 TCP、UDP 内容、按顺序到达的
免责声明:这不是一个“如何”的问题。作为背景信息,我更想知道实际使用的不同实际做法是什么。 我们知道 UDP 没有像 TCP 那样的 PMTU 发现。因此,我看到了几种避免使用 UDP 产生 IP 碎
在 recv() 's手册页我发现在这种情况下返回值可以为零: Datagram sockets in various domains (e.g., the UNIX and Internetdoma
我正在使用Alpakkas UDP.bindFlow将传入的UDP数据报转发到Kafka代理。正在发送这些数据报的旧版应用程序需要从与发送消息相同的端口进行UDP响应。我正在努力为这种行为建模,因为这
connect的手册说: If the socket sockfd is of type SOCK_DGRAM then addr is the address to which datagrams
我想在 Linux 上的几个进程之间建立 IPC 连接。我以前从未使用过 UNIX 套接字,因此我不知道这是否是解决此问题的正确方法。 一个进程接收数据(未格式化的,二进制的)并应使用数据报协议(pr
在 Linux 2.6.34 ppc 系统上,在某些情况下的多进程应用程序中,两个 PF_UNIX 套接字之间的 sendto() 返回 -1 和 errno EPERM。我可以在手册页中找到的此上下
我有一段代码使用 Unix 域套接字和 sendmsg/recvmsg 在两个进程之间发送 fd。此代码需要在 Linux 和 Mac 上运行(它针对两个平台分别编译)。我正在使用 SOCK_DGRA
我是一名优秀的程序员,十分优秀!