我遇到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);
答案 0 :(得分:3)
TCP无法发送/ recv字符串。 TCP无法发送/ recv超过一个字节的消息。 TCP不能发送/ recv结构长于一个字节。
TCP传输是一个字节流。
如果你想传输比一个字节更复杂的东西,你需要一个额外的协议,因此需要HTTP,SMTP等协议。
如果您特别想要发送以空字符结尾的字符串,例如,您需要缓冲并连接接收到的数据,直到检测到空值为止 - 那么您就拥有了' C'样式字符串并且可以继续汇编下一个字符串。
RGDS, 马丁
答案 1 :(得分:1)
我假设您在服务器端使用两个char数组作为变量“login”和“password”。
在这种情况下,为了创建它们,你必须在声明中给它们一个固定的大小,这个数组的大小是多少?MAX宏的大小是多少?
在你的客户端你使用五个长度的数组,如果MAX宏的长度是10个字节,那么第一个recv()会读取两个发送。