Tag: recv

通过C中的套接字传递一个结构

我试图将整个结构从客户端传递到服务器,反之亦然。 让我们假设我的结构如下 struct temp { int a; char b; } 我正在使用sendto并发送结构variables的地址,并使用recvfrom函数在另一端接收它。 但是我无法获得在接收端发送的原始数据。 在sendto函数中,我将接收到的数据保存到struct temptypes的variables中。 n = sendto(sock, &pkt, sizeof(struct temp), 0, &server, length); n = recvfrom(sock, &pkt, sizeof(struct temp), 0, (struct sockaddr *)&from,&fromlen); 其中pkt是struct temptypes的variables。 尽pipe我正在接收8bytes的数据,但如果我尝试打印它只是显示垃圾值。 任何帮助解决它? 注: 不得使用第三方库。 编辑1:我对这个序列化的概念是新的。但是没有做序列化我不能通过套接字发送结构? 编辑2:当我尝试发送一个string或一个整数variables使用sendto和recvfrom函数我正在接收端的数据正确接收。 为什么不在一个结构的情况下? 如果我不必使用序列化函数,那么我应该单独发送结构的每个成员? 这实际上不是一个合适的解决scheme,因为如果有'n'个成员,那么为了发送或接收数据就会添加“n”行代码。

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

我在C中有一些关于套接字库的问题。下面是我在我的问题中提到的一段代码。 char recv_buffer[3000]; recv(socket, recv_buffer, 3000, 0); 我如何决定recv_buffer有多大? 我正在使用3000,但它是任意的。 如果recv()收到比我的缓冲区大的数据包,会发生什么? 我怎么知道我是否收到了整个消息,而又不需要再次调用recv,并且在没有任何东西需要接收的时候能够永远等待呢? 有没有办法让缓冲区没有一个固定的空间,所以我可以继续增加它,而不用担心空间不足? 也许使用strcat将最新的recv()响应连接到缓冲区? 我知道这是一个很多的问题,但我会非常感激任何答复。

Python的socket.recv()返回非阻塞套接字是什么,如果没有数据收到直到发生超时?

基本上,我已经读了几个地方, socket.recv()将返回任何它可以读取,或者一个空string,表明另一方已经closures(官方文档甚至没有提到什么时候连接是什么closures…太棒了!)。 因为我们知道recv()只有在实际有东西需要接收的时候才会返回,所以当它返回一个空string时,它必须意味着另一端已经closures了连接,对吗? 好的,好吧,但是当我的套接字是非阻塞时呢? 我已经search了一下(也许还不够,谁知道?),并不知道如何判断对方何时使用非阻塞套接字来closures连接。 似乎没有方法或属性告诉我们这一点,比较recv()的返回值与空string似乎是绝对无用的…是只有我有这个问题? 作为一个简单的例子,假设我的套接字的超时设置为1.2342342(无论你在这里是否定的非负数)秒,我打电话给socket.recv(1024) ,但另一方在1.2342342秒期间不发送任何东西。 recv()调用将返回一个空string,我不知道连接是否仍然存在或没有线索…

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败软件导致连接中止:recv失败

所有。 我有几天遇到这个问题,这是详细的堆栈信息: org.springframework.dao.RecoverableDataAccessException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 18,940 milliseconds ago. The last packet sent successfully to the server was 18,918 milliseconds ago. ### The error may involve com.tuan800.searchtask.model.dao.mybatis.RelationDao.updateSuggest-Inline ### The error occurred while setting parameters ### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure […]