gpt4 book ai didi

Java : what is the difference between serversocket and datagramsocket?

转载 作者:可可西里 更新时间:2023-11-01 02:33:17 30 4
gpt4 key购买 nike

基本上我是 java 中服务器和客户端编程的新手,我用谷歌搜索了所有必要的资源来学习这个特定主题,但是我不明白它们之间的区别。

到目前为止我对这两个的理解是它们都可以处理客户端请求,但我需要进一步了解每个类的好处以及我什么时候可以有效地使用它的特定场景或特定情况。

例如,我有一个服务器客户端程序,它是团队查看器的一个子集,其中客户端程序必须每毫秒向服务器发送一次屏幕截图,而服务器将从另一个连接的客户端发布它。该代码正在运行,但我发现 ServerSocket 消耗了太多堆,尽管它也成功地交付给了服务器和客户端。我还阅读了一篇与我的问题相关的博客(链接丢失),建议 DatagramSocket 是解决方案,因为它不执行握手。

我真的很关心这些类(class)的优点和缺点。

最佳答案

ServerSocket 用于接受某些流协议(protocol)上的传入网络连接;例如TCP/IP。

DatagramSocket 用于在某些无连接数据报/消息协议(protocol)上发送和接收数据报;例如网络协议(protocol)/IP


补充问题:

Basically what is a datagram

数据报是在单个逻辑数据包中发送的一堆信息。例如,UDP 数据包。

and does this mean datagram = lightweight packets ?

这取决于你对轻量化的定义!

UDP 数据报作为 IP 数据包发送。如果 UDP 数据报对于 IP 数据包来说太大,发送方会将其分成多个 IP 数据包,然后由接收方重新组装。

and what does connectionless [mean],

这意味着双方之间不存在任何逻辑联系。如果UDP 数据报的组成IP 包丢失,则UDP 数据报丢失。接收者永远不知道(在应用程序级别)。 UDP 中没有数据丢失报告和重试。这是典型的“无连接”行为。

does it mean Data might get lost during transmission?

基本上,是的。如果你想要可靠的/无损的数据传输,你应该使用 ServerSocket 和 Socket;例如TCP/IP 流。

但是,请注意,即使使用(裸)TCP/IP 流,也无法保证数据传输:

  • 如果出现网络故障,或者发送方或接收方出现故障,则连接可能会在数据传输过程中中断。这将导致数据丢失......对于该连接。 (套接字不支持重新连接。)如果发送方和/或接收方仍然存在,他们通常会被告知连接已断开,但他们不知道原因,也不知道在传输过程中丢失了多少数据。

  • 数据在传输过程中可能会以 TCP/IP 错误检测无法发现的方式损坏。接收者不会知道这已经发生。

这两个问题都可以在应用程序协议(protocol)级别解决;例如第一次使用消息队列,第二次使用强加密和强校验和。


关于您尝试使用 ServerSocket

The code is working but I found out ServerSocket consumes so much Heap although it delivers successfully to the servers and client as well.

你做错了什么。如果您适本地使用 API,内存开销应该是微不足道的。

我的猜测是您正在执行以下一项或多项操作:

  1. 为每个客户端/服务器交互打开一个新连接
  2. 在服务器端,为每个连接创建一个新线程
  3. 不关闭连接。

I also read a blog (The link is missing) that is related to my problem suggested that DatagramSocket is the solution because it does not execute Handshakes.

  1. 握手不会导致显着的内存消耗。
  2. 无论如何,TCP/IP 堆栈通常不会默认进行握手。

关于Java : what is the difference between serversocket and datagramsocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27730330/

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