草庐IT

Send2Trash

全部标签

c - 当通过 Socket 发送数据时,send/write 何时返回 -1?

Linux。TCP套接字。send()/write()命令何时会失败?是否只有内核中的TCP发送缓冲区溢出才返回-1? 最佳答案 来自OpenGroupwrite()的定义:Uponsuccessfulcompletion,write()[XSI]andpwrite()shallreturnthenumberofbytesactuallywrittentothefileassociatedwithfildes.Thisnumbershallneverbegreaterthannbyte.Otherwise,-1shallberetu

c - 文件传输程序中的 send() 和 sendto() 阻塞

似乎当我像这样使用send()函数(在TCP文件传输程序中)时while((count=recv(socketConnection,buff,100000,0))>0)myfile.write(buff,count);函数recv()只是等到整个数据都来了,当它不再接收任何数据但在UDP程序的类似程序中时退出循环while((n=recvfrom(sockfd,mesg,1024,0,(structsockaddr*)&cliaddr,&len))>0)myfile.write(mesg,n);recvfrom()函数只是阻塞并且由于某种原因不会退出循环,据我所知,recv()和rec

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){

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处有)是一个标志。我不明白的是我需要插入的值来