草庐IT

socket_desc

全部标签

sockets - TCP 套接字中的 IP 地址

我有一个根节点(服务器)通过TCP套接字连接到许多其他节点(客户端)。我想从服务器向客户端发送一些数据,但每个节点的数据都不同,并且取决于该节点的ip地址。因此我应该有连接到服务器的每个节点的IP地址。我怎样才能得到这些信息? 最佳答案 当您调用accept(2)时您可以选择检索客户端的地址。intaccept(intsocket,structsockaddr*restrictaddress,socklen_t*restrictaddress_len);您需要存储这些地址,然后发送(2)给每个您需要发送的地址。所以工作流程应该是这样

sockets - 如何将套接字中的数据读取到现有缓冲区的偏移量中?

根据我对TCP的理解,如果我将X个字节发送到一个套接字,它几乎可以保证它会到达那里,尽管有效负载可能会split并分成两个单独的部分到达(所以如果我等待一个25字节的数据包,我可能会得到20个字节,然后在下一次读取时再得到5个字节)。我从未见过这种情况发生,但我希望在发生这种情况时得到保护。在过去,我通常设计我的套接字读取来解决这个问题——将传入的字节读入缓冲区,然后不断地检查缓冲区的大小。如果整个数据包有足够的数据,则处理该数据包,从缓冲区前面移除字节,然后继续。我现在正尝试在Rust中编写一个类似的系统,使用mio作为TCP套接字。我的缓冲区只是一个数组:[u8;MAX_BUFFE

sockets - 接收 tcp/ip 套接字的缓冲区大小

接收操作中预期的最大数据大小是多少?必须发送的数据非常大,但我猜在某些时候会出现数据包碎片? 最佳答案 您始终可以限制recv()将填充(参数)的缓冲区的大小您的应用程序设计不应对recv()愿意在一次调用中提供的字节数敏感。与MTU关系不大。在某些TCP堆栈设计中,对recv()的一次调用不会返回多于一个底层数据包协议(protocol)的数据报。在其他情况下,它可能与套接字的接收缓冲区一样大。 关于sockets-接收tcp/ip套接字的缓冲区大小,我们在StackOverflow上

java - 断线后恢复文件上传/下载(Socket编程)

我正在编写一个程序,使用套接字编程在客户端和服务器之间下载/上传文件。我到目前为止编写的代码在我可以成功传输文件的意义上有效。但是,如果在下载/上传过程中由于网络/客户端/服务器问题导致连接失败。我需要从原始点恢复下载/上传(不希望重新发送最初发送的数据)。我不知道该怎么做。我正在将文件读入字节数组并通过网络发送。我最初的想法是每次我下载..我应该检查文件是否已经存在并将数据读入字节数组->将数据发送到服务器进行比较然后从服务器文件返回剩余数据比较两个字节数组。但这似乎效率低下并且消除了恢复下载的意义(因为我再次发送数据)。注意:文件名是唯一标识符。如果有人可以就我应该如何实现文件恢复

sockets - 节省带宽 GPRS 和 TCP

您好,出于实验原因,我为我的旧Windows手机制作了一个程序,每5秒发送一次GPS数据、温度等,以创建一个车队管理系统。我注意到在一小时内消耗了350kb,尽管我只发送了20kb的数据...由于我对网络知识不深,一个tcp连接的字节数是多少?也许我应该让套接字保持事件状态,因为我每5秒关闭并打开它一次。这样会节省字节数吗?MTU在这里也很重要吗?还有其他减少开销的想法吗?谢谢 最佳答案 让我们在这里做一些数学运算。每5秒是每小时720个连接加上数据。20K/720是每个连接的大约28字节有效载荷(您的GPS数据)。IPandTCP

sockets - 在 Kotlin 中创建 TCP 监听器

我目前正在为我正在从事的项目试用Kotlin。这个项目需要我打开一个套接字并在一个端口上监听TCP数据包,以便稍后解析它们。在Java中,如果使用缓冲区读取器、套接字和服务器套接字定义了引用的变量,则以下工作:while((CurrentLine=ClientBufferReader.readLine())!=null){FullString+=CurrentLine}但是,在Kotlin中,这是行不通的,因为无法对赋值求值。我怎样才能在Kotlin中检索相同的结果? 最佳答案 在这种特殊情况下,您可以将其重写为valFullStr

sockets - 如何侵入 Unix 内核以从 TCP 中删除指数退避?

我想出了一个想法,如果我们从TCP中删除指数退避时间,这将提高TCP吞吐量的性能。我也遇到了一篇论文,其中说明了如何去做。只需谷歌“删除tcp指数退避时间”,您就会得到它。但是,我无法理解如何进入UNIX内核并破解它以改变TCP功能。拜托,如果有人可以帮助我,那就太好了。谢谢。 最佳答案 如果那是真的,为什么会有指数退避?你真的认为开发和发展TCP的人添加一些东西只是为了让性能变差吗?然后,人们不假思索地添加了所有不同的操作系统实现?移除指数退避将增加丢包率(因为拥塞退避不会那么快)并增加延迟(因为路径上每个接口(interface

c - socket编程中如何正确拒绝客户端连接?

我有一个程序作为一个简单的TCP服务器工作,它将接受和服务多达4个客户端。我写了下面的代码片段来实现这个目标,为了更清楚,我用“魔数(MagicNumber)”替换了一些MACRO。while(1){intret=0;/////sock_isthelisteningsocket,rset_conn_onlycontainssock_//if(select(sock_+1,&rset_conn_,NULL,NULL,&timeo_)现在,当少于4个客户端连接时,此代码片段正常工作,但是当第5个客户端连接时,如您所见,它不会在for循环中被接受,这导致这样的问题:在下面的while循环中,

c# - 如何修复错误 "Only one usage of each socket address is normally permitted"

我有1个充当服务器的进程(TcpListener)和一个或多个充当客户端的进程(TcpClient)。客户端每1-2秒向服务器发送一次Tcp请求,服务器会用结果消息响应。在正常情况下,服务器在关闭时会使用TcpListener.Stop,但有时服务器会崩溃(无论出于何种原因),然后就不会执行此操作。如果我随后尝试重新启动,则会收到以下错误:“通常只允许每个套接字地址(协议(protocol)/网络地址/端口)使用一次”我仅在有客户端正在运行且尽管TcpListener已不存在(已崩溃)的情况下仍继续尝试连接时出现此错误。当我在重新启动服务器/TcpListener之前第一次手动关闭/杀

sockets - JMeter TCP Sampler 无法识别流的结尾

我正在尝试使用TCP采样器运行一个简单的测试当使用默认的TCPClient类时,在响应超时时间过去后,我从服务器收到了正确的响应,然后在采样器结果中出现错误500:Responsecode:500Responsemessage:org.apache.jmeter.protocol.tcp.sampler.ReadException:JMeter似乎无法识别消息结尾字符(服务器发送\r\n)。如何配置JMeter以查看EOM?我尝试使用BinaryTCPClientImpl,并在Jmeter.properties中设置tcp.BinaryTCPClient.eomByte=13,但bin