草庐IT

Networking

全部标签

c - tcp 缓冲区中的总数据包长度是否可以超过分配的缓冲区大小?

众所周知,getsockopt(sock,SOL_SOCKET,SO_SNDBUF,&opt_val,&opt_len);返回之前在setsockopt().(如man7tcp中所写:请注意,TCP实际上分配了请求缓冲区大小的两倍setsockopt(2)调用,因此后续的getsockopt(2)调用将不会返回与setsockopt(2)调用中请求的相同大小的缓冲区。TCP将额外空间用于管理目的和内部内核结构,)所以如果我执行setsockopt(sock,SOL_SOCKET,SO_SNDBUF,(int*)&buf_size,sizeof(buf_size))forbuf_size

python - ZeroMQ 连接阻塞

如果连接端点是一个IP,如tcp://192.168.0.2:9876,Socket.connect将立即返回。但是,如果端点包含类似tcp://server.local.:9876的DNS名称,Socket.connect似乎会阻塞,直到server.local。已解析,如果无法解析名称,最终会失败并引发zmq.error.ZMQError异常。有没有办法以非阻塞方式连接? 最佳答案 DNS主机名解析在zmq::socket_base_t::connect中以同步方式完成://Resolveaddress(ifneededbyth

c# - 将文件发送给 NAT 路由器后面的用户

我需要向路由器后面的用户发送文件。我知道如果他在他的路由器上启用端口转发,我可以通过tcp连接来做到这一点。我想避免这种情况,以使我的应用程序更易于用户使用。所以我一直在尝试做tcp穿孔,这几乎是不可能的。我设法做了udppuchholing。如果你已经知道udppunchholing是什么,那么你可以跳过这部分:所以我所做的是为了在恰好位于路由器后面的两个用户之间建立连接。用户1通过udp协议(protocol)与具有WANip地址的服务器对话。用户2也做同样的事情。好的,现在服务器知道每个用户的远程端点。服务器现在向用户2发送用户1的信息。服务器通知用户1用户2已收到该信息。用户2

networking - UDP 或 HTTP over TCP/IP 用于简单的多人游戏

我正在构建一个多人游戏,玩家会同时被问到一个问题,他们必须选择一个答案。他们有几秒钟的时间来回答,当时间到了或每个人都回答完时,他们会被问到下一个问题。我计划在服务器端使用Java(或者nodeJS,如果我想学习一个新框架),在客户端使用JS(jQuery和jQueryMobile)。我以后也可能会构建native应用程序,所以我想保持该选项处于打开状态。我的问题是:您建议使用哪种服务器通信协议(protocol)?我正在考虑常规TCP(带有Ajax的HTTP)调用,因为延迟并不是真正的问题,但如果您提出其他建议,我准备好审查这个选择。非常感谢您的帮助 最佳

http - 如何试用HTTP、FTP、SMTP等应用协议(protocol)

我正在阅读ComputerNetworking:ATop-DownApproach5th(fifth)edition.我已经读到第二章了,我想知道是否可以通过编写请求等实际尝试不同的应用程序协议(protocol)?如果您需要一个工具来执行此操作,那么我正在使用Windows,如果我需要一个工具,那么该工具在幕后做什么以进行连接? 最佳答案 您应该使用telnet连接到所有这些协议(protocol),执行您的请求,阅读答案等等。我正在读到telnet在较新的Windows版本上默认被禁用(难以置信,为什么?谢天谢地我停止使用它了!

使用线程的并发 TCP 服务器

我正在尝试创建一个并发TCP服务器,它接受多个(N个连接),其中N是已知的。(例如N=8)所以我正在尝试创建一个预线程TCP服务器。.....for(i=0;i在上面的代码中创建了线程并调用了thread_function()但它没有按预期工作。程序在调用thread_function()后结束,直到创建了几个线程。我实际上想要创建“N”个线程并等待客户端连接(使用accept())。连接后,我想接收/收集数据(或)发送命令等。这就是我有connection_handler()的原因,但在此之前我被卡住了。任何人都可以尝试更正thread_function()函数吗?我有点被困在这里。

c++ - 如何从服务器的源代码中提取网络协议(protocol)?

我正在尝试为一个流行的网络编写一个聊天客户端。原始客户端是专有的,比我想要的大15GB。(公平地说,其他人称之为游戏。)互联网上绝对没有该协议(protocol)的文档,大多数搜索结果只能返回客户端的脚本接口(interface)。我能理解,如果使用不当,可能会破坏其他人的体验。我已经下载了几个备选服务器的源代码,包括我想连接的那个,但是那些除安装说明外不包含任何文档评论很差(我粗略浏览了一下)非常庞大(目标服务器的src文件夹包含12MB的.cpp和.h文件),以及grep没有找到相关内容我也试过搜索他们的论坛并联系服务器的维护者,但到目前为止,没有成功。数据包嗅探不太可能有帮助,因

networking - 无数据时TCP断开

我查了TCP协议(protocol)的wiki,没发现长时间没有数据传输socket连接会不会超时。我的意思是..不会有物理问题,但两台计算机将有一段时间没有数据可以相互发送。怎么连接还会存在?是否会有一些低级数据传输来帮助它了解它没有损坏?谢谢!对不起,如果问题很愚蠢.. 最佳答案 没有数据通过网络发送来维持TCP连接。您可以简单地通过发送()来自任一对等方的零字节数据包来发送网络层保持事件状态,或者启用套接字选项以使操作系统定期为您发送它们。在我看来,应用层保持事件(您的应用程序协议(protocol)对其进行管理)提供比传输层

linux - 了解 BSD 界面

我试图了解BSD套接字接口(interface)中的事件如何转换为TCP连接的状态。特别是,我试图了解在连接过程的哪个阶段accept()在服务器端返回客户端发送SYN服务器发送SYN+ACK客户端发送ACKaccept()返回这些步骤中的哪一个? 最佳答案 accept在连接完成时返回。连接完成在客户端发送他的ACK之后。accept为您提供一个可以通信的套接字。你当然知道,只有建立连接才能进行通信。并且在握手之前无法建立连接。在客户端感知到他的ACK之前返回是没有意义的。他完全有可能在初始SYN之后什么都不说。

java - Java Socket 客户端和 C++(基于 Boost)服务器之间的联网

在工作中,我正在设计一个用于控制机器人组的用户界面。机器人使用UDP广播来管理彼此之间的Action。GUI需要能够与机器人通信。为此,运行一个中间服务器。所有机器人都听它(使用UDP传感器),并且所有运行的GUI都连接到它(通过TCP)。它管理GUI机器人通信。但是,服务器是用C++Boost库编写的,GUI是用Java编写的,并且出现了一些网络问题。我很容易通过套接字连接到服务器:try{socket=newSocket(targetAddress,targetPort);}catch(IOExceptione){e.printStackTrace();}服务器注册连接,一切正常。