- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是套接字编程的新手,最近选择了 Python。我有几个问题似乎无法找到明确的答案。
我正在研究通过 UDP 发送数据,并编写了一个简单的 python 脚本来实现这一点。可以很好地发送小对象(准确地说是小的腌制对象),但是我应该如何处理太大而无法放入一个 UDP 数据包中的对象?
我想到了首先以字节为单位确定对象的大小。如果对象小到足以放入 UDP 数据包,则什么都不做,但如果对象太大,则对象将被均匀地(如果可能)分割成许多较小的 block ,以便它可以放入多个UDP 数据包并发送到客户端。一旦客户端接收到数据 block ,客户端会将多个UDP数据包重新组装成原始状态。
在尝试实现上述内容时,我立即碰壁了。
根据我所做的研究,似乎没有任何“有效”的方法来获取对象的字节大小。这意味着我无法确定对象是否太大而无法放入 UDP 数据包。
如果我坚持向客户端发送一个大对象会怎样?它会自动分片并在客户端重新组装还是会被客户端丢弃?
通过 UDP 处理大对象的正确方法是什么?请记住,大对象可以是大小为 1GB 的文件或大小为 25MB 的字节对象。
提前致谢。
旁注:
我明白 UDP 数据包可能并不总是按顺序到达,并且因此我已经为它实现了对策为发送到客户端的 UDP 数据包标记序列号。
我明白不能保证客户端会收到所有 UDP 数据包。我暂时不担心丢包。
我确实知道 TCP 是我正在尝试做的事情的合适人选,但我的重点是了解 UDP 以及如何处理目前无法确认来自客户端的数据包的情况。
我知道 pickle 的使用是不安全的。稍后会研究它。
最佳答案
UDP 数据包可以大到大约 64k。所以如果你想发送一个比这个大的文件,你可以将自己分成 64k 的数据包。那是理论上的最大值。我的建议是使用 500 字节的较小块的片段。
如果您使用 64k 数据包,IP 负责数据包的分段和重组。 500 字节的较小数据包不太可能被分段,因为 mtu 通常约为 1500 字节。如果您使用较大的分段数据包,如果其中一个分段丢失,IP 将丢弃它们。
你是对的,使用 TCP 可能更适合用于类似这样的事情,甚至是像 TFTP 这样的现有协议(protocol)。它像您一样实现了每个数据包的确认机制和序列号。
关于Python:通过 UDP 发送大对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125774/
我刚刚了解了 udp 校验和计算。 但我很困惑算法是否检测到所有错误。 最佳答案 当然不是。没有校验和可以检测到所有错误。 关于udp - UDP 校验和是否检测到所有错误?,我们在Stack Ove
下面这个函数有什么问题?? 它应该抛出错误,因为我没有在本地主机上运行 UDP 服务器。 int openUdpSocket(int port) { int sock,sin_size;
我正在尝试修改这两个程序。我想让 udpclient.c 能够接收消息并让 udpserver.c 将消息回显给客户端。我还想在 udpclient 发送消息之前先获取它们的时间标记消息。收到的消息应
我有相当简单的 UDP 服务器写在 c 上。 有时我需要知道在套接字中排队的所有 udp 数据包(字节)的当前长度。 据我了解,getsockopt 没有得到这样的信息。 欢迎使用 Linux 和 F
除了直播音乐/视频外,谁能告诉在哪里使用 UDP 协议(protocol)? UDP 的默认用例是什么? 最佳答案 其他任何您需要性能但如果数据包在途中丢失时可以生存的东西。例如,多人游戏浮现在脑海中
与 TCP 的监视方法相反,UDP 是否会在所有数据包可用时立即发送它们? 谢谢。 最佳答案 TCP 有拥塞控制,UDP 没有,因为它是无连接的。 但是您的问题涉及多个问题:发送消息是否会导致立即发送
我知道 UDP 本质上是不可靠的,但是当连接到 localhost 时,我希望内核以不同的方式处理连接,因为一切都可以在内部处理。那么在这种特殊情况下,UDP 是否被认为是一种可靠的协议(protoc
我正在尝试使用 flash 和 rtmfp 协议(protocol)开发一个实时视频聊天应用程序,但我有疑问rtmfp 如何保证连接对等点,尤其是当对等点位于不同网络时。 最佳答案 RTMFP 依靠中
我发现所有使用 Netty 4.0 的 TCP 服务器实现都使用了 ServerBootstrap 实例。 The biggest and only difference between a serv
对于个人 MMO 游戏项目,我正在 java 中实现一个自制的可靠的基于 UDP 的协议(protocol)。鉴于我当前的设置,我相信窥探者劫持 session 相对简单,因此为了防止这种情况,我借此
我正在尝试手动计算各种 UDP 数据包的校验和,但与 Wireshark 中显示的结果相比,我总是得到错误的结果。下面是我如何做到这一点的示例: Source Address: 192.168.0.1
我正在尝试手动计算各种 UDP 数据包的校验和,但与 Wireshark 中显示的结果相比,我总是得到错误的结果。下面是我如何做到这一点的示例: Source Address: 192.168.0.1
我有一个奇怪的问题。我有一个成功运行的 C++ (boost asio) P2P 应用程序,它可以在大多数 NAT 上运行。问题是,当我将初始启动端口号指定为 1000 时,它会检查 1000 是否空
带有数据源的短 radio 链路,需要通过 IPv6 的 1280 Kbps 吞吐量,使用 UDP 停止和等待协议(protocol),该区域内没有其他客户端或明显的噪声源。我到底如何才能计算出最佳数
似乎可以在没有有效负载的情况下发送 UDP 数据包。 我能想到的唯一不需要有效载荷的就是用于 NAT 打洞。 这还能用来做什么? 这与我之前的问题有关Under Linux, can recv eve
我有一个客户端,我无法更改其代码 - 但我想(重新)使用 编写代码ZeroMQ socket 。 客户端同时使用原始 TCP 和原始 UDP socket 。 我知道我可以使用 ZMQ_ROUTER_
网络 4.0.24 我通过 UDP 传递 XML。收到 UPD 数据包时,数据包的长度始终为 2048,截断消息。尽管如此,我尝试将接收缓冲区大小设置为更大的值(4096、8192、65536),但它
我正在尝试编写一个有关 UDP 连接的简单程序来了解它们。我已经实现了一些基本的事情,但是当我尝试发送并取回我发送的内容时,我遇到了一些问题,例如, 当我这样做时;发送一个字符串 “asd”到服务器我
当我检查时,我在 UDP 客户端每 100 毫秒从服务器发送 UDP 数据包 接收频率不等于 100 毫秒,有时它要少得多,例如 3 毫秒…10 毫秒。 我知道UDP client server是异步
海友我是一个学习winsock2的新手。以下是我的udp服务器和客户端程序。 我这个程序客户端不知道服务器的IP地址,只知道端口。但是服务器会在整个网络中广播一条消息。 当客户端收到消息时,它会回溯服
我是一名优秀的程序员,十分优秀!