0

我对发送/接收有问题:如果客户端发送两个字符串,服务器仅在一个接收中接收两个字符串,第二个接收参加来自客户端的第三次发送(我不想发送)。我想发送 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);
4

2 回答 2

3

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

TCP 传输是字节流。

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

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

Rgds,马丁

于 2012-07-14T10:59:59.863 回答
1

我假设您在服务器端使用两个字符数组作为变量“登录”和“密码”。

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

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

于 2012-07-14T11:12:42.207 回答