首页 文章
  • 2 votes
     answers
     views

    获取可在套接字中读取的字节数

    这是我的情景 . 我有一个与服务器通信的TCP客户端 . 服务器和客户端都在本地计算机(Windows)上运行 . 对话框如下: 客户端将数据发送到服务器(请求) 客户端关闭套接字上的send 客户端通过读取调用进行响应 服务器接收数据,处理并发回响应(一次性,不分成块) 服务器关闭套接字上的发送 客户端收到响应,并继续处理 . 在步骤3,我使用recv()调用来阻塞和...
  • 0 votes
     answers
     views

    设置了MSG_DONTWAIT标志的recv()不接收来自TCP套接字的数据

    我正在FreeBSD c中编写基本服务器和客户端聊天应用程序 . 基本上多个客户端连接到多个端口上的服务器(例如端口4,5,6,7),这些端口存储在一个阵列中,该阵列通过查找相应客户端发送的数据不断迭代 . 我使用recv(端口号,缓冲区,sizeof(缓冲区),MSG_DONTWAIT),以支持非阻塞端口 . 当我使用带阻塞的read()方法时,此方法有效,但当我使用带有非阻塞的recv方法时,...
  • 0 votes
     answers
     views

    如何进行阻止recv调用

    这可能是一个奇怪的请求,但实际上,我想调用recv()阻塞 . 它似乎默认情况下应该是阻止,但对我来说,它不是,我找不到任何方法来实现它 . 我有一个非常简单的服务器应用程序,“打开套接字 - 绑定 - 等待连接 - 接收”一方面, 而另一方面,一个简单的“开放套接字 - 连接 - 发送”客户端应用程序 . 他们在LocalHost上进行通信 . 服务器: int clTcpServer::ope...
  • 0 votes
     answers
     views

    为什么来自套接字的recv()不会阻塞

    我创建一个TCP服务器套接字,侦听connect()请求和accept()它们 . 接受客户端套接字后,从中接收数据 . 我希望recv()函数以超时阻塞,但它似乎是非阻塞的 . 我从服务器接收响应时已经使客户端处于阻塞模式,但它似乎与服务器端的工作方式不同 . 下面我在阻塞模式下复制粘贴我想要接收数据的服务器端: int clientSocket = accept(_serverSocket, ...
  • 1 votes
     answers
     views

    recv()阻止第二次调用

    我有一个简单的客户端 - 服务器应用程序,用于从客户端发送文件到服客户端以预定义大小的块(例如512)发送文件 . 服务器也以相同大小的块接收文件 . 在服务器收到整个文件后发送确认之前,客户端上的套接字不会关闭 . 会发生什么: 客户端设法发送(send()调用)整个文件,意味着它的所有块 . 服务器设法获取(recv()调用)只有第一个块,意味着recv()调用在第一次调用时返回512...
  • 0 votes
     answers
     views

    为什么在连接关闭时recv有时不会返回?

    我有一个简单的winsock客户端/服务器应用程序 . 大多数情况下一切正常,但有时即使客户端应用程序终止,recv也不会返回值 . 从MSDN引用: 如果没有错误发生,recv返回接收的字节数,buf参数指向的缓冲区将包含接收到的数据 . 如果已正常关闭连接,则返回值为零 . 否则,返回值SOCKET_ERROR,并且可以通过调用WSAGetLastError来检索特定的错误代码 . 如果没...
  • 2 votes
     answers
     views

    在socket接收大数据后,recv()返回0

    我的服务器需要向客户端发送两个大小为500kb的图像 . 客户端在没有丢失任何数据的情况下接收第一个图像,但是当服务器将另一个图像发送到客户端时,recv()在从服务器发送数据之前返回0,并且在此之后服务器send()返回-1 . 这是我的send()和recv()代码: Server: fp2 = fopen(totaldir2,"rb"); if(fp1==NULL) {...
  • 3 votes
     answers
     views

    c posix套接字recv功能

    我有一个或许是一个非常有问题的问题,我环顾四周但是还没有看到直接的答案,我想我可以在这里得到一个快速的答案 . 在使用bsd套接字的简单TCP / IP客户端 - 服务器选择循环中,如果客户端发送两条同时到达服务器的消息,那么在服务器上调用recv会返回在缓冲区中捆绑在一起的两条消息,或者是不同的到达消息要单独阅读? 我问,因为我在一个环境中工作,我无法告诉客户端如何构建要发送的消息 . 通常re...
  • 1 votes
     answers
     views

    recv()何时返回?

    我使用套接字创建了一个服务器和一个客户端 . 我的服务器是用c语言编写的,运行在我的覆盆子pi上,我的客户端用Swift编写,运行在我的Mac / iPhone上 . 我没有得到的是当我的服务器recv()函数执行我从客户端发送的内容时?如果我发送0-10个字节,它在关闭连接之前不会从recv()函数返回 . 但如果我发送100个字节,它会立即执行 . 每当我从客户端写一条消息时,我希望我的服务器...
  • 0 votes
     answers
     views

    Berkeley Socket:recv系统调用

    //server side void* s2(void *arg){ info *s = (info*)arg; char buffer[MAXS]; int k; sockaddr_in addr; socklen_t aSize = sizeof(sockaddr_in); int sfd = accept(s->fd,(sockaddr*...
  • 2 votes
     answers
     views

    recv()总是返回0

    我有一个 recv() 函数的问题,我可以't explain: it always returns 0. I'一个客户端/服务器应用程序,其中服务器只需要通过互联网(不同的PC)从客户端接收一个字符串 .没有连接问题,我也试图从服务器发送一个字符串到客户端:它工作 . 我在博客中搜索,我找到了什么,recv() socket function returning data with length...
  • 115 votes
     answers
     views

    在套接字库中调用recv时,我的recv缓冲区应该有多大

    我对C中的套接字库有几个问题 . 这是我在问题中引用的一段代码 . char recv_buffer[3000]; recv(socket, recv_buffer, 3000, 0); 如何判断recv_buffer的大小?我是'm using 3000, but it'是任意的 . 如果 recv() 收到的数据包大于我的缓冲区会怎么样? 如果没有再次调用recv,我怎么知道我是...
  • 0 votes
     answers
     views

    C recv函数行为

    这是我的两段代码: server.c #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <sys...
  • 0 votes
     answers
     views

    使用recv()后保存接收缓冲区的头部

    我试图将部分收到的缓冲区保存在char *变量中,但它无法正常工作 我在用: recv(sock,buff,BUFLEN,0); char *head=NULL; head= (char *) malloc (16); strncpy (head,buff,16); 我如何将它的一部分(比如4个第一个字节)保存到char * head中?
  • 0 votes
     answers
     views

    TCP recv和接收缓冲

    我的网络应用程序项目有问题 . 这是我主要结构的一部分: struct elemento { char username[256]; short int UDPport; unsigned long IPaddress; int socket; char buffer[256]; int...
  • -1 votes
     answers
     views

    C套接字 - send()发送,recv()没有接收

    所以我在这里做一些客户端服务器的东西,我希望我的服务器监听客户端,当客户端连接到服务器时,客户端发送一个字符串 . 连接 Build ,客户端发送它的字符串,但是,在服务器端,recv()返回-1 . /* Server */ int main() { int fd, conn_fd; struct sockaddr_in ad; int bytes; char recv_buff...
  • -1 votes
     answers
     views

    socket recv函数不返回更新的值

    尝试使用c(Linux)创建套接字应用程序以不断从服务器获取数据为此,我创建了一个循环,在其中,例程连接,发送命令,接收一些数据并关闭套接字 . 它适用于第一次交互但看起来像recv函数无法从第二次迭代和其他迭代更新缓冲区变量 . 试图使用 memset 函数清除但清除变量,它在第一次迭代后总是空白 有任何想法吗 ? 这是我使用的代码示例 #include<stdio.h> #incl...
  • 5 votes
     answers
     views

    处理多个recv()调用和所有可能的场景

    我是C的新手并编写TCP服务器,并且想知道如何从发送服务器将响应的命令的客户端处理recv() . 为了这个问题,我们只说头是第1个字节,命令标识符是第2个字节,有效载荷长度是第3个字节,然后是有效载荷(如果有的话) . recv()这些数据的最佳方法是什么?我想调用recv()来读入缓冲区中的前3个字节,检查以确保头和命令标识符有效,然后检查有效负载长度并再次调用recv(),并将有效负载长度作...
  • 3 votes
     answers
     views

    在C中立即(逐个数据包)从套接字接收TCP有效负载

    如何在逐个数据包的基础上从C中的开放网络套接字接收数据(字节流)?我想在它到达时立即从套接字读取数据(一旦数据包到达机器) . 当我在套接字上执行read()(或recv())调用时,我得到的是10,000字节的整个TCP消息 . 相反,我希望收到第一个TCP段有效载荷,处理它,然后继续到下一个,等等 . 注意 - 我不想要原始数据包 . 只是TCP段数据有效载荷 . 还要注意 - 实质上我希望通...
  • 0 votes
     answers
     views

    winsock recv数据块

    我用C#和Tcp服务器编写了一个带有C的Tcp客户端在TCP服务器端,我通过循环接收数据: unsigned char* buffer = new unsigned char[BUFFERSIZE]; int pLen =0; int recievedLen = 0; do{ recievedLen = OnReadData(0, clientSock,buf...
  • 0 votes
     answers
     views

    套接字recv(阻塞)因errno EAGAIN而失败 - 资源暂时不可用

    我正在实现一个UNIX域套接字Inter Process通信代码,我试图从套接字读取时随机点击这个错误 - “错误11:资源暂时不可用” . 我使用MSG_PEEK读取套接字中的字节数,并为接收缓冲区分配字节,并读取实际数据 . 套接字是一个阻塞套接字,我没有任何代码可以进行非阻塞(总之,接受/读/写) . 什么可能导致阻塞套接字读取的指针?从MSG_PEEK的man page开始,当使用O_NO...
  • 0 votes
     answers
     views

    当recv buf已经有数据时,tcp socket recv将返回“资源暂时不可用”

    我使用epoll实现TCP套接字通信来监视所有客户端事件,只有一个线程处理for循环中的所有客户端 . 每个套接字都是非阻塞的 . 现在我刚遇到问题,当客户端发送的数据超过MTU时,意味着几个分片包,服务器总是无法完全读取所有数据 . 如下所示,我首先阅读头部,从头部获取pdu len,然后阅读pdu部分 . 问题是虽然我成功地阅读了头部,紧跟着pdu recv(),但它总是多次返回EAGAIN ...
  • 1 votes
     answers
     views

    recv阻塞直到发送第二个数据包

    我正在使用 recv 方法在Windows CE 6.1系统上通过TCP接收数据 . 出于某种原因,第一次调用recv有时会阻塞,直到发送下一个数据包 . 我现在突然得到两个包 . tcpClientSocketId = accept( tcpServerSocketId, (struct sockaddr *)&client, (int *)&sockaddrLength ); ...
  • -2 votes
     answers
     views

    用于TCP套接字编程的Recv函数

    我是Socket Programming的新手 . 我正在尝试创建一个客户端应用程序 . 服务器是使用TCP进行通信的摄像机 . 相机正在发送连续数据 . 使用Wireshark,我可以看到摄像机正在发送不同大小的连续数据包,但不超过1514字节 . 但是我的 recv 函数总是返回 2000 ,这是我缓冲区的大小 . unsigned char buf[2000]; int bytesIn = ...
  • 0 votes
     answers
     views

    C语言中TCP套接字的recv函数

    我是套接字编程的新手 . 我有一个用c编写的客户端应用程序连接到相机 . 然后Camera在0到1460之间以块的形式发送帧包 . 我已经使用recv函数来接收数据包 . 我看到很多问题,其中明确提到recv函数返回接收的字节,但在我的情况下,recv函数返回在recv函数的第3个参数中写入的值,即len . 无论如何,我们可以通过它找到收到的实际字节数 . 我甚至尝试使用char *但这甚至都不...
  • 0 votes
     answers
     views

    如何在Python中的recv之前找出套接字中的字节数?

    我有一个TCP处理数据流 . 它一次需要4096个字节,但我需要一种方法来在它恢复之前找出整个套接字大小 . 这样我就可以确定在切换套接字之前读取套接字的次数 . 它还会通知这是这个套接字的最后一个recv,这样我就可以在选择切换到另一个套接字之前使用它 . def handle_tcp(self, sock, remote): fdset = [sock, remote] ...
  • 0 votes
     answers
     views

    python socket和recv()返回空数据

    我有一个连接到python服务器的c程序,发送一个短字符串(少于约100个)然后关闭套接字 . 它定期执行此操作 . python服务器接受连接,生成一个线程,并在该线程中调用: data = sock.recv(4096) 数据通常都是空的 . 在阅读了python手册页和一些堆栈溢出帖子后(感谢大家!),我意识到问题是c程序打开,写入,关闭,套接字如此快,到python服务器接受时,如文档所...
  • -1 votes
     answers
     views

    TCP连接:服务器没有't '了解'接收已结束

    我正在处理我正在构建的tcp连接上的问题 . 当从客户端向服务器发送数据时,服务器似乎“等待”(对我而言不那么明显)另一个'recv()'并且客户端永远不会退出,因为它已完成发送部分并等待'recv( )'来自服务器的答案 . 这陷入了一种僵局 . 以下代码是我认为问题所在的部分 . Server code : #define BUFFSIZE 1024; char buffer[BUFFSI...
  • 4 votes
     answers
     views

    C套接字可以在没有客户端关闭连接的情况下收集0个字节吗?

    我在C中实现了一个Web服务器 . 它在一个连接的阻塞套接字上调用 recv() 来接收传入的HTTP请求 . Linux手册页在阻塞套接字上声明了以下关于 recv() 的内容: 如果套接字上没有可用的消息,则接收呼叫等待消息到达...接收呼叫通常返回任何可用的数据,直到请求的数量,而不是等待接收所请求的全部金额 . ...这些调用返回接收的字节数,如果发生错误,则返回-1 ...当对等体...
  • 2 votes
     answers
     views

    从C套接字读取十六进制缓冲区的问题

    我正在使用SDL_net套接字API来创建服务器和客户端 . 我可以轻松读取字符串缓冲区,但是当我尝试发送十六进制数据时,recv获取长度,但我似乎无法读取缓冲区内容 . IPaddress ip; TCPsocket server,client; int bufSize = 1024; char message[bufSize]; int len; server = SDLNet_TCP_Op...

热门问题