linux - Linux 中的 TCP 套接字数据不一致

标签 linux sockets tcp wxwidgets tcpclient

我需要一些关于以下内容的信息。

我正在创建用于跟踪数据的服务器和客户端。客户端发送过来的数据通过wxWidgets显示在GUI上。这是我的问题。

我有两个跟踪客户端,每个客户端在 0.9 微秒内发送 100 条消息的数据。我的问题是服务器接收到的数据顺序不对。

Example:
Actual data:

data from client 1
data from client 1
data from client 1
data from client 2
data from client 1
data from client 1
data from client 1
data from client 2
data from client 1
data from client 1
data from client 2

Received data on server side:
data from client 2
data from client 2
data from client 1
data from client 1
data from client 1
data from client 2
data from client 1
data from client 1
data from client 1

问题:

如何解决这个数据不匹配的问题?我正在使用 TCP 套接字。所有代码都是用 CPP 编写的。

约翰

最佳答案

我认为您不能保证不同主机上两个不相关的 TCP 客户端之间的数据同步。 TCP 仅保证连接中数据的顺序。

保证这一点的一种方法是,每当客户端想要发送一些数据时,将 token 从服务器传递到客户端。当客户端完成发送数据时,可以假定 token 已“使用”。

  1. 客户端:请求发送数据的 token

  2. 服务器:为客户端分配 token

  3. 客户端发送数据并发出数据结束信号

  4. 服务器假定客户端的 token 已过期并且可以自由分配给另一个客户端。

    当然,客户端不应在数据结束后或 token 不可用时发送任何数据。

关于linux - Linux 中的 TCP 套接字数据不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10810899/

相关文章:

linux - 输出保持不变

php - 用 Flash 和 PHP 编写视频聊天小部件

linux - 为什么即使没有/dev/shm shm_open() 也会成功?

c++ - Boost Asio 不完整写入套接字

c - 具有重定向输出应用程序的 Linux C TCP 套接字客户端/服务器

安卓 6 : file/proc/sys/net/ipv4/tcp_fastopen

linux - 在位置 2 安装带有 NVM 不匹配支架的 NPM

java - Android TCP - 应用程序关闭时套接字不会断开连接

android - 如何写一个Android SocketServer来监听wifi

c - 与欺骗 IP 的握手