【发布时间】:2014-03-10 15:02:51
【问题描述】:
在 C 语言中,您通常(大致)接收/发送数据:
服务器:
- 创建套接字
- 将套接字绑定到端口
- 听
- 接受
- 接收发送数据
在客户端:
- 创建套接字
- 连接
- 接收发送
我的问题是在服务器完成accept之后提出的。
想象之后 accept 在服务器端有三个单独的行
发送数据:
connfd = accept(listenfd, (struct sockaddr*)NULL ,NULL);
write(connfd, var1, var1Size);
write(connfd, var2, var2Size);
write(connfd, var3, var3Size);
这是否意味着在客户端我需要三读? 像这样:
read(sockfd, &x, size1);
read(sockfd, &y, size2);
read(sockfd, &z, size3);
也就是说发送和接收调用应该如何对应 在服务器端和客户端?每次发送都应该是客户端的相应接收吗?
如果在客户端,经过 3 次读取调用(如上),我想向服务器发送数据怎么办? 我应该在客户端和服务器端分别添加一个新的发送和一个新的接收吗?
所有这些发送/接收是否应该在单个 accept 调用上下文中发生?
这是一张图片,可以更好地说明我可能对什么样的场景感兴趣:
欢迎使用伪代码解释如何处理这种连接。
【问题讨论】:
-
假设 TCP,否 - 一次读取可以读取所有发送(取决于大小)。
-
@sje397:是的,但是如果我想分块发送数据怎么办?
-
@dmcr_code 这些块有什么意义吗?接收者是否需要将一个块与另一个块分开?如果是这样,您需要在每个块中嵌入信息,以便它们可以再次分开,例如通过在每个块的前面添加固定数量的字节,即块的长度。然后,接收者可能会进行多次 recv() 调用来接收一个块(并且它可能会在一次 recv() 调用中获得一个块的结尾和下一个块的开始的一半。
-
@dmcr_code - 您发送的大小为例如两个字节然后是消息,在另一端读取大小然后等待那么多字节
标签: c networking