草庐IT

Networking

全部标签

PHP套接字监听循环

使用以下代码,我可以接收1个请求并写入:functionlisten(){//Settimelimittoindefiniteexecutionset_time_limit(0);//Settheipandportwewilllistenon$address='XX.XX.XX.XXX';$port=XXXX;//CreateaTCPStreamsocket$sock=socket_create(AF_INET,SOCK_STREAM,0);//Bindthesockettoanaddress/port$bind=socket_bind($sock,$address,$port);//

networking - TCP 和 POSIX 套接字 accept() 语义

情况:服务器调用accept()。客户端向服务器发送SYN。服务器获取SYN,然后将SYN/ACK发送回客户端。但是,客户端现在挂断/死机,因此它永远不会向服务器发回ACK。会发生什么?accept()是在收到SYN后立即返回,还是阻塞直到返回客户端的ACK?如果它阻塞,它最终会超时吗? 最佳答案 对accept()的调用会阻塞,直到它建立连接。除非并且直到3次握手完成,没有连接,所以accept()不应返回。对于非阻塞套接字,它不会阻塞,但也不会为您提供有关部分完成的握手的信息。 关于

linux - 如何在 Linux 中禁用 TCP 慢启动?

我正在寻找禁用TCPslowstart高速网络机制。当前,客户端使用非阻塞1Gbps链接将100MB流发送到随机服务器。根据我的计算,流程的完成时间不到1秒。但问题是它们无法达到完整的链路带宽。换句话说,它们在获得完整链路带宽之前在慢启动阶段完成。因此,我想将TCP拥塞窗口大小增加到最大值。有没有人知道如何在不修改内核的情况下轻松更改该值? 最佳答案 在Linux平台上,可以通过以下命令检查和禁用SSR设置:$>sysctlnet.ipv4.tcp_slow_start_after_idle$>sysctl-wnet.ipv4.tc

sockets - 了解WebSockets

我的理解是,套接字对应于网络标识符,端口和TCP标识符。[1]操作系统使进程能够与端口关联(IIUC是使进程可在网络上寻址入站数据的一种方式)。因此,WebSocket服务器通常将与一个端口相关联,该端口因接受和理解升级请求的HTTP而闻名(例如443),然后使用TCP标识符使单个服务器进程和单个端口同时打开多个网络套接字。。请有人可以确认或纠正我的理解吗?[1]“在每个TCP,我们会连接一个NETWORK标识符和一个TCP标识符使用端口名称来创建SOCKET名称,该名称将是唯一的在连接在一起的所有网络中。”https://tools.ietf.org/html/rfc675

c - 通过 UDP 实现 ack?

我们有一个系统(用C语言构建)可以通过UDP进行通信。最近我们发现有必要保证数据包的传递。我的问题是:要确保使用ack数据包进行交付,对基于UDP的系统的最少添加是什么?此外,理想情况下无需操作数据包header。我们对数据包进行应用程序级别的控制,包括序列号和ack/nack标志。我想知道这是否是一个失败的原因,我们尝试做的任何事情基本上都是有缺陷和损坏的TCP版本。基本上,我们是否可以进行最低限度的改进来实现有保证的交付(我们不需要TCP的许多功能,例如拥塞控制等)。谢谢! 最佳答案 TCP交织了3个可能相关的服务(好吧,TCP

C 套接字 : does send wait for recv to end?

我在Windows上使用阻塞式C套接字。我使用它们将数据更新从服务器发送到客户端,反之亦然。我以高频率(每100毫秒)发送更新。send()函数是否会等待接收方recv()接收到数据才结束?如果我很好地理解手册页,我假设不会:"Successfulcompletionofsend()doesnotguaranteedeliveryofthemessage."那么如果一个正在运行10次send()而另一个只完成1次recv()会发生什么?我需要使用某种确认系统吗? 最佳答案 让我们假设您正在使用TCP。当您调用发送时,您正在发送的数据

language-agnostic - 基于 TCP/IP 的语音通信

我目前正在开发使用DirectSound在内联网上进行通信的应用程序。我有使用UDP的工作解决方案,但后来我的老板告诉我他出于某种原因想要使用TCP/IP。我试图以与UDP几乎相同的方式实现它,但收效甚微。我得到的基本上只是噪音。其中20%是录制的声音,其余只是奇怪的噪音。我猜测原因是TCP需要多次读取所有接受的数据,直到它得到我可以播放的最终声音。现在两个问题:我走在正确的轨道上吗?将TCP/IP用于此类应用程序(各种语音session)甚至是个好主意吗?我是用C#做的,但我不认为这是特定于语言的。 最佳答案 不,使用TCP是一个

c# - 强制关闭 TCP 客户端时服务器无法识别断开连接

介绍我的客户端应用程序的单个实例将与远程服务器建立两个传出TCP连接-一个主连接和一个文件传输连接。当客户端应用程序被强制关闭时-有时服务器不会确认两个套接字连接都已被删除。服务器将检测到两个连接都已断开,或者只有主连接已断开,这是不希望的。了解到问题仅出现在几台测试机中的一台上,并且当客户端被强制关闭时,文件传输连接正在主动传输数据。分析了网络流量-我了解到操作系统实际上确认了两个RST标志!因此,我倾向于认为问题出在服务器代码上。代码使用Socket.BeginReceive方法,我的主要负责检测断开连接的回调如下所示:privatevoidReadCallback(IAsyncR

networking - 为什么可以同时在 TCP 和 UDP 上使用同一个端口?

我在搜索时看到,可以在同一台计算机上使用两个不同的程序,使用相同的端口和相同的网络接口(interface)通过网络进行通信,前提是一个使用UDP,另一个使用TCP。但是我没有得到很好的解释,它实际上是如何工作的,为什么这是可能的?多个程序是否也可以使用同一个UDP端口,因为UDP不在对等点之间建立真正的连接,而只是将数据包发送到一个地址?我知道使用TCP是不可能的,因为它会在服务器和客户端之间创建同步连接,但是UDP呢?如果可能,请详细解释,或链接一篇关于该主题的好文章。 最佳答案 其他答案是正确的,但有些不完整。IP(又名“IN

java - 我可以使用两个不同的线程在同一个套接字上读写吗?

我正在为一项作业写一些东西,我必须管理主机之间的TCP连接。我的设想最初是两个TCP连接,一个传入,一个传出,以及一个非常复杂的协议(protocol)来管理这些连接的创建和销毁。那么,这里有一个更简单的替代方案,我希望它能奏效。一个socket,易于连接,易于破坏。一个线程将数据写入该套接字上的流,一个线程从同一套接字上的流中读取数据。我对阻塞没有任何问题,所以我不需要使用nio来做任何事情。我能做到吗? 最佳答案 TCP套接字是一个全双工流,您可以从多个线程读取和写入它。这样做是否是个好主意是一个完全不同的问题。