草庐IT

Networking

全部标签

c++ - 如何通过 boost asio 支持 TCP 服务器中的多个连接

我有以下TCP服务器代码:#include#include#include#include#include#include#includeusingboost::asio::ip::tcp;classtcp_connection:publicboost::enable_shared_from_this{public:typedefboost::shared_ptrpointer;staticpointercreate(boost::asio::io_service&io_service){returnpointer(newtcp_connection(io_service));}tcp

sockets - 游戏服务器 TCP 网络套接字 - 公平性

我正在为回合制游戏编写游戏服务器。一个标准是游戏需要对所有玩家尽可能公平。到目前为止它是这样工作的:每个客户端都有一个TCP连接。(如果相关,连接通过WebSockets打开)在运行时,通过epoll持续检查传入的套接字消息。遍历准备好读取套接字的客户端:阅读来自客户的所有消息。更新每条消息的内部游戏状态。将传出消息排队到受影响的客户端。在每个“窗口”结束时(转):遍历客户端并将所有排队的传出消息写入它们的套接字我对公平的关注提出了以下问题:我向客户发送消息的顺序重要吗?在所有套接字上调用write()对我的程序来说只需要几分之一秒,但是如果我对客户端列表进行排序,在底层操作系统或网络

networking - 我什么时候应该考虑使用 TCP 或 UDP?

我知道这两种协议(protocol)之间的区别和优缺点,虽然不是很清楚。好吧,我仍然不清楚如何使用它们,具体来说,在它们之上构建应用程序时我应该使用哪种协议(protocol)?是否存在普遍原则或普遍采用的做法?选择时应考虑哪些因素。例如。对于视频流服务,UDP始终优先于TCP。 最佳答案 TCP-当您发送信息时,您将收到express服务等确认信息。如果没有确认,则重新发送。UDP-无确认。没有重新发送。首先,您应该了解您发送和接收的信息的敏感性。例如,如果您正在处理一些汇款,您当然需要确认银行收到了您的钱,如果连接出现问题,您就

c - 使用 TCP/IP : recv() blocks 的套接字编程

我正在开发一个简单的客户端/服务器项目,它将一大块数据从客户端移动到服务器。我使用TCP/IP。服务器设置监听套接字,客户端连接。首先传输一个短的16字节“header”,其中包含一些信息,包括之后要传输的数据量。然后传输大块(大约2MB),即send(socketDesc,(void*)myBuffer,bigChunkSize,0);和recv(socketDescPeer,(void*)myBuffer,bigChunkSize,0)首先,我使用winsock2在Windows下实现了客户端,它可以正常工作。我现在尝试将此实现移植到linux,在这种情况下,服务器端永远不会从re

ios - 由于重复的 TCP SYN 而导致 TCP 连接错误

我的iPhone与Linux服务器建立了TCP连接:iOS-----tcpsyn---->linuxiOS-----tcpsyn---->linuxlinux-----tcpackwithseq=xxx--->iOSlinux-----tcpackwithseq=yyy--->iOSiOS快速重新发送TCPsyn,从而导致两个具有不同服务器序列的TCPACK。iOS使用第一个seqxxx,linux使用第二个seqyyy。所以这个连接不能传输数据。iOS如此快速地重新发送syn是一个错误,但是linux服务器在做正确的事情吗?我该如何解决? 最佳答案

linux - 如何测试用户空间的 tcp/ip 堆栈?

我正在研究用户空间的tcp堆栈(主要是为了好玩),但我在针对unixtcp堆栈进行测试时遇到了一些问题。目前唯一的测试形式是通过单元测试完成的。但是,我想针对真实的内核tcp堆栈测试我的tcp堆栈。我尝试了以下设置但没有成功。使用原始套接字:我编写了一个简单的echotcp服务器,它使用内核tcp套接字接受连接。tcp服务器监听本地主机上的8080端口。我的tcp客户端使用用户空间tcp堆栈。但是,每当客户端向服务器发送syn时,内核都会发送一个tcprst。在我修改iptable以丢弃所有tcprst数据包之后,它有点工作。但是,即使建立了3路syn、syn+ack、ack握手,服务

networking - 用户模式下的 MPTCP

有没有在用户模式而不是内核模式下实现MPTCP的?如果不是,是否有任何建议可以在用户模式下重用内核模式源代码?http://www.multipath-tcp.orghttps://github.com/multipath-tcp/mptcp 最佳答案 有一个基于python/scapy的实现:https://github.com/nimai/mptcp-scapy此外,如果您想自己开发,可以查看C中的MPTCP代理用户空间实现以帮助您入门:http://open-innovation.alcatel-lucent.com/proj

linux - 如何验证 TCP 在 Linux 上保持事件状态

我想在我的linux机器上设置tcpkeepalive。所以我正在做的是运行一个脚本if[`/sbin/sysctl-nnet.ipv4.tcp_keepalive_time`!=200];then/sbin/sysctl-wnet.ipv4.tcp_keepalive_time=200;但我仍然无法与亚马逊的Redshift联系起来。有人可以帮我看看如何检查tcpkeepalive是否真的设置了吗? 最佳答案 要检查keepalive是否处于事件状态,请打开一个连接,不要交换任何数据,并使用tcpdump或类似工具验证数据包是否在

networking - 重置 RST 标志后的 TCP 重传

我有大约20个客户端与同一个LAN中的中央服务器一起通信。客户端可以与服务器同时进行交易。服务器将每个事务转发到网络中的外部设备。有时有效,有时我的应用程序在客户端屏幕上显示“超时”消息(随机)我镜像了所有流量并发现了第一个TCP序列的TCP重置数据包后的TCP重传。我立即想到数据包丢失,但我所有的电缆/NIC都很好,而且我在捕获中没有看到DUPACK。看来RST包可能有不同的含义。是什么导致了这些TCP重置?我应该将调查重点放在哪里:网络设计还是应用程序设计?如果有任何帮助,我将不胜感激。提前致谢。 最佳答案 根据截图判断,我假设

java - Java如何从字节数组形成TCP数据包?

虽然Java中的SocketIn/OutputStreams对API用户来说似乎是基于流的,但TCP数据包是基于数据包的。一个人只能写一个字节或一个字节数组。但是也可以写入比TCP数据包可以携带的字节更多的字节。那么Java是如何从write方法中形成TCP数据包的呢?创建调用write(singleByte)4次4次TCP数据包?还是java将字节连接在一起?java是否加入和拆分字节以形成TCP数据包? 最佳答案 不,Java,或者更准确地说是Java虚拟机,没有理由深入这些细节。JVM的作用是像任何native程序一样打开na