c - 双发送/接收问题

标签 c sockets send recv

我有发送/接收问题:如果客户端发送两个字符串,服务器只在一个接收中接收这两个字符串,而第二个接收来自客户端的第三次发送(我不想发送)。我想发送 2 个字符串并接收 2 个字符串。我该怎么办?

我的代码: 客户

char login[] = "admin";
char password[] = "admin";

send(sd, login, strlen(login), 0);
send(sd, password, strlen(password), 0);

服务器:

bzero(login,MAX);
bzero(password,MAX);

recv(sd_client, login, sizeof(login), 0);
recv(sd_client, password, sizeof(password), 0);

最佳答案

TCP 无法发送/接收字符串。 TCP 不能发送/接收长度超过一个字节的消息。 TCP 不能发送/接收长度超过一个字节的结构。

TCP 传输是一个字节流。

如果你想传输任何比一个字节更复杂的东西,你需要一个额外的协议(protocol)在上面,因此 HTTP、SMTP 等协议(protocol)。

例如,如果您特别想发送以 null 结尾的字符串,您需要缓冲和连接接收到的数据,直到检测到 null - 然后您就有了“C”风格的字符串,可以继续组装下一个字符串。

Rgds, 马丁

关于c - 双发送/接收问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11483159/

相关文章:

C:关于 Beej 的网络指南的问题......这里有一个假设吗?

select - 确定用winsock(FIONWRITE)可以发送多少字节?

c# - 无需在源代码中输入我的电子邮件凭据即可发送电子邮件支持票证

c - 两个 TCP/IP 套接字 send() 请求实际上在一个 TCP 消息中处理

计算耗时

python-3.x - 我正在尝试在 python 3 中创建一个套接字,但我得到了这个错误,即使我从网上复制了代码 stragte

c - 将结构指针或数组作为函数参数传递

javascript - 当用户关闭浏览器时,Socket.io 不会关闭连接

c - 如何将文件中的文本写入C中的字符串

c - ( C ) 无法找到动态分配结构的核心转储错误的原因