草庐IT

send_buf

全部标签

c - 保证在一次 send() 调用(tcp 套接字)中发送的数据的最小大小是多少?

这个问题在这里已经有了答案:Whyisitassumedthatsendmayreturnwithlessthanrequesteddatatransmittedonablockingsocket?(1个回答)关闭9年前。在select之后返回并为tcp套接字设置了写入fd。如果我尝试在该套接字上发送数据,使用send一次发送的数据的最小保证大小是多少?接口(interface)?我知道我必须运行一个循环以确保所有数据都已发送。我仍然想了解发送的最低保证数据是多少以及为什么?

c# - tcp 服务器 : How to send something and close the TCP connection afterwards

我正在使用在我的C#应用程序中给出的tcpServer:-http://www.codeproject.com/Articles/488668/Csharp-TCP-Server它有一个TcpServer类,可以打开一个端口并开始监听它。我通过TcpServer类提供的OnDataAvailable事件处理程序接收数据。问题是,客户端期望并依赖于tcp服务器关闭连接。在关闭连接之前,(有条件地)我想将一些数据发送回客户端。这是我为实现相同目标而编写的内容。staticvoidmyServer_OnDataAvailable(TcpServerConnectionconnection){

c - 测试 Fortran IPC : Sending 4 MiB of data using TCP/IP is equally fast as sending 100 B

我目前正在测试在两个Fortran程序之间有效传递数据的不同方法。我试过写入文件、管道和TCP/IP。我的测试结果如下所示。请注意,图表仅显示4*10^4B的时间,因为这是我为文件和管道设置的高度。4*10^6B测试只针对TCP/IP程序进行。为了测试执行时间,我使用了大多数Linux发行版中的time程序,即:time./program。然后我使用real值作为我的时间。很明显,写入文件和使用管道是线性的。有一些开销,但它非常简单。然而,TCP/IP协议(protocol)似乎不受影响-无论数据量如何。实际发生的是:B.f90启动并调用server.c,在localhost:5555

sockets - socket编程中send()返回时,是什么意思?

当send()返回时,有三种可能:1。要发送的数据已复制到内核缓冲区2。要发送的数据已发送给对端3。要发送的数据已发送给对等方并收到其确认实在是一头雾水,看了Linux源码中关于TCP/IP协议(protocol)栈的一些代码,找到了数据流的路径:当我们使用send()函数时,它调用底层的sys_sendto()函数,而sys_sendto()函数使用send_msg()来完成工作,而send_msg()转向__send_msg()最后__send_msg()调用scm_send()再次使用其底层的__scm_send()函数。总的来说,数据流的运行路径是这样的:send()==>sy

c# - 即使在 Tcpclient.NoDelay = true 之后,socket.send 也会将数据包附加在一起;

这开始让我很沮丧,因为无论我做什么,我的数据包都会被挤在一起,这让另一端不得不区分它们很烦人(对象很容易,可变字符串可能很痛苦)。有没有办法避免这种情况?这是我正在使用的一些粗略代码(是的,初始化发生在这里,这是粗略的测试代码,很抱歉糟糕的编程约定)sender.Connect("localhost",8523);sender.Client.SendTimeout=1000;sender.NoDelay=true;byte[]buffer=ASCIIEncoding.ASCII.GetBytes(message);sender.Client.Send(buffer);buffer=AS

c++ - 使用Winsock的send()/recv()时,确认响应是否必要?

使用C++的Winsock,我使用send()/recv()TCP连接来发送和接收数据。我想确定数据已经传递给另一方,并且想知道是否建议在(如果)使用recv接收数据后发送一些确认消息。这有两种可能性,请提出建议:如果发送返回传递的缓冲区的大小,则假定数据至少已传递到线路另一侧的recv函数。当我说“至少”时,我的意思是即使recv在那里失败(例如,由于缓冲区不足等),我也不在乎,我只是想确保自己已完成服务器的部分工作正确-我已经完全发送了数据(即数据已到达另一台计算机)。使用其他确认:在使用recv接收到数据之后,发回一些已接收数据包的ID(已发送的每个数据的header的一部分),

python 套接字 : make sure that TCP packets are send before closing connection

我正在使用通过TCP控制的中继。据我了解,以下代码应该有效:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect(('192.168.0.200',17494))s.send(chr(101))s.close()但是,我注意到套接字在实际发送包之前关闭了,并且中继没有做任何事情。作为肮脏的解决方案,我现在在关闭连接之前放置了一个sleep语句并且它可以正常工作。s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect(('192.168.0.200',1749

sockets - 是成功的 send() "atomic"吗?

成功调用send()并且返回的数字等于size参数中指定的数量是否保证不会发生“部分发送”?或者有什么方法可以让操作系统在为系统调用提供服务时中断,发送部分数据,等待可能很长时间,然后发送其余部分并返回而不通知我较小的返回值?我不是在谈论内核缓冲区中没有足够空间的情况;我意识到我会得到一个较小的返回值并且必须重试。更新:根据目前的答案,我的问题可以改写如下:在调用send()返回之前是否有任何方法可以通过线路发送数据包/数据? 最佳答案 Doesasuccessfulcalltosend()withthenumberreturned

c++ - 如何关闭 POSIX 函数 send() 中的 TCP PSH 标志?

我正在使用以太网向步进电机系统发送命令。命令使电机移动,或响应驱动器状态,或配置驱动器等...步进电机系统有时会挂起或无法执行命令,制造商查看了我提供的所有内容后告诉我关闭TCP层的PSH标志。显示我的代码使用PSH标志的Wireshark屏幕截图:我正在使用在Ubuntu(16.04)中运行的C++11。我的发送函数如下所示:intsendStatusCode=send(socket,*&pointerToMessageAsCharArray,sizeOfMessage,0);我看了thewriteup对于函数,我知道最后一个参数(我在0处有)是一个标志。我不明白的是我需要插入的值来

c - 使用 C TCP 套接字, 'send' 可以返回零吗?

使用TCP套接字时,Csend函数是否可能返回零?手册页只是说它会返回发送的字节数,但我不确定它是否会在无法发送任何数据时只返回-1。 最佳答案 我很确定,尽管内存在时间的迷雾深处,但我以前见过它返回零,在另一端跟不上的海量数据传输的情况下。根据内存,在那种情况下,远程TCP堆栈缓冲区已满,堆栈已通知本地端它要延迟,直到一些空间被清除并且本地缓冲区也已满。此时,从技术上讲,这不是错误(因此没有返回-1),但本地堆栈无法接受任何数据。我不是完全现在是这种情况,因为当前的Posix标准似乎表明它会在这种情况下简单地阻塞(或者如果它设置为