草庐IT

java - 在 Java 中,如何从已打开的 C 套接字的文件描述符中获取 Socket 或 DatagramSocket?

我有一个分为两部分的Linux程序。一部分进行NAT遍历以获得UDP套接字(UDP打洞)或TCP套接字(TCP打洞)。第一部分是用C编写的,以允许促进或增强NAT遍历过程的native功能。第二部分实际使用的是通过第一部分执行的NAT穿越获得的已连接套接字。问题来了。我希望第一部分(获取套接字的部分)独立于第二部分(将套接字用于特定应用目的的部分)。例如,我希望第一部分可重复用于各种不同的应用程序,这些应用程序都需要在对等点之间建立UDP和TCP连接。现在,我希望第二部分(应用程序部分)用Java而不是C或C++编写。我希望第二部分使用由负责NAT遍历的C代码获得的套接字连接。假设第一

TCP 与可靠的 UDP

我正在编写一个应用程序,客户端将通过无线链接将数据上传到服务器。连接应该非常可靠。链接预计会断开很多次,并且会有很多客户端连接到服务器。我很困惑是使用TCP还是可靠的UDP。请分享您的想法。谢谢。 最佳答案 当然,RUDP不是正式标准,也不知道您是否会找到可以使用的现有实现。如果要在从头开始滚动和重新建立TCP连接之间做出选择,我会选择TCP。 关于TCP与可靠的UDP,我们在StackOverflow上找到一个类似的问题: https://stackover

networking - 为什么可以同时在 TCP 和 UDP 上使用同一个端口?

我在搜索时看到,可以在同一台计算机上使用两个不同的程序,使用相同的端口和相同的网络接口(interface)通过网络进行通信,前提是一个使用UDP,另一个使用TCP。但是我没有得到很好的解释,它实际上是如何工作的,为什么这是可能的?多个程序是否也可以使用同一个UDP端口,因为UDP不在对等点之间建立真正的连接,而只是将数据包发送到一个地址?我知道使用TCP是不可能的,因为它会在服务器和客户端之间创建同步连接,但是UDP呢?如果可能,请详细解释,或链接一篇关于该主题的好文章。 最佳答案 其他答案是正确的,但有些不完整。IP(又名“IN

sockets - TCP 套接字和已连接的 UDP 套接字之间的区别

默认UDP套接字加上Connect()调用是一个已连接的UDP套接字。我知道与TCP和UDP相关的差异,但在这里我想知道只是sockets的差异 最佳答案 当使用TCP套接字时,tcp堆栈负责将数据发送到网络并传递给接收方,重新传输数据直到接收方确认。TCP还负责流量控制,即以适合网络连接和接收方的速率传输数据。最后,TCP确保接收方以正确的顺序准确地获取数据一次。使用UDP,程序员可以直接管理到网络的传输,并且必须处理丢失和乱序的数据包以及流量控制和将数据分段到可以通过网络连接传输的数据包。最后,由于udp和tcp是不同的协议(p

Wireshark抓取网卡协议分析(TCP,UDP,ARP,DNS,DHCP,HTTP超详细版本)

1.Wireshark抓包使用wireshark工具抓取ping命令操作选择本机网卡WLAN,点击开始,开始抓包在数据列表区中选取TCP协议,在数据详细区中显示出其详细信息(1)Frame:物理层的数据帧概况(2)EthernetII:数据链路层以太网帧头部信息(3)InternetProtocolVersion6:互联网层IP包头部信息(4)TransmissionControlProtocol:传输层的数据段头部信息,此处是TCP(5)HypertextTransferProtocol:应用层的信息,应用层协议中有此信息如HTTP执行抓包的操作:如pingwww.baidu.comwire

java - 如何为 Java 套接字指定端口范围?

在Java中,您可以将数字零作为Socket或DatagramSocket构造函数的单个参数。然后Java将该Socket绑定(bind)到一个空闲端口。是否可以将端口查找限制在特定范围内? 最佳答案 嗯,看完文档后,我认为你做不到。您可以绑定(bind)到任何端口,如果NotAcceptable则重新绑定(bind),或者重复绑定(bind)到您范围内的端口直到成功。第二种方法将是最“有效”的。我对这个答案感到不安,因为它...不优雅,但我真的找不到其他任何东西:/ 关于java-如何

java - 将 UDP 与 NIO 一起使用有什么意义?

NIO和TCP非常适合用于许多连接。由于需要为每个新客户端打开一个新连接,因此每个客户端通常都需要自己的线程来阻塞I/O操作。NIO通过允许数据在可能的时候被读取而不是阻塞直到数据可用来解决这个问题。但是UDP呢?我的意思是,由于协议(protocol)的设计方式(发送它并忘记它,基本上),无连接UDP不具有与其相关的TCP的阻塞性质。如果我决定将一些数据发送到某个地址,那么它将这样做,没有延迟(在服务器端)。同样,如果我想读取数据,我可以只接收来自不同来源的单个数据包。我不需要使用多个线程与许多地方建立许多连接来处理它们中的每一个。那么,NIO和选择器是如何增强UDP的呢?更具体地说

networking - 使用 UDP 的 Netcat 流式传输

我可以让netcat使用TCP流式传输视频{server}cat[movie].avi|nc[clientipaddress]65535{client}nc-l-p65535|mplayer-我试过使用-u命令通过UDP发送,但这不起作用{server}cat[movie].avi|nc-u[clientipaddress]65535{client}nc-u-l-p65535|mplayer-有什么想法吗? 最佳答案 使用TCP和UDP流式传输字节之间存在根本区别...TCP在看到字节流结束时发送EOFUDP只是停止发送数据(即它不

networking - 多个套接字可以与 UDP 的同一个端口相关联吗?

我认为多个套接字可以与同一个TCP端口相关联。但是同样的事情也适用于UDP吗? 最佳答案 在TCP中将多个套接字与一个端口相关联的唯一方法是监听然后接受。这种情况下的目的是为每个传入的客户端提供一个唯一的套接字,以便将它们的字节流分开。在UDP的情况下你不需要它,因为没有字节流。您可以使用单个UDP套接字编写整个UDP服务器。您刚刚读取并发送给该客户端的处理程序,该处理程序通过相同的套接字写回响应。 关于networking-多个套接字可以与UDP的同一个端口相关联吗?,我们在Stack

tcp - YouTube 是否通过 TCP 流式传输视频?

我刚刚使用wireshark嗅探了一些流量并注意到,YouTube流量依赖于TCP。我想,他们在使用UDP?但他们似乎会使用HTTP八位位组流。YouTube真的使用TCP传输流还是我遗漏了什么? 最佳答案 因为他们需要TCP提供的一切(慢启动、传输节奏、指数退避、接收窗口、重新排序、重复拒绝等),他们要么必须使用TCP,要么尝试自己做所有这些事情。没有比每个操作系统的优化TCP实现更好的方法了。 关于tcp-YouTube是否通过TCP流式传输视频?,我们在StackOverflow上