double send / recv的问题

时间:2012-07-14 10:52:30

标签: c sockets send recv

我遇到send / recv的问题:如果客户端发送两个字符串,服务器只接收一个recv中的两个,第二个recv参加客户端的第三个发送(我不想发送)。我想发送2个字符串并接收2个字符串。我该怎么办?

我的代码: CLIENT

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

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

SERVER:

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

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

2 个答案:

答案 0 :(得分:3)

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

TCP传输是一个字节流。

如果你想传输比一个字节更复杂的东西,你需要一个额外的协议,因此需要HTTP,SMTP等协议。

如果您特别想要发送以空字符结尾的字符串,例如,您需要缓冲并连接接收到的数据,直到检测到空值为止 - 那么您就拥有了' C'样式字符串并且可以继续汇编下一个字符串。

RGDS, 马丁

答案 1 :(得分:1)

我假设您在服务器端使用两个char数组作为变量“login”和“password”。

在这种情况下,为了创建它们,你必须在声明中给它们一个固定的大小,这个数组的大小是多少?MAX宏的大小是多少?

在你的客户端你使用五个长度的数组,如果MAX宏的长度是10个字节,那么第一个recv()会读取两个发送。

相关问题