2

这是客户端,它提示用户输入字符串并将其发送到服务器

//send
printf("\nPlaintext : ");
gets(send_data);
send(sock,send_data,strlen(send_data), 0);

//recv
bytes_recieved = recv(sock, recv_data, 1024, 0);
recv_data[bytes_recieved] = '\0';
printf("\nEnciphered text = %s " , recv_data);
fflush(stdout);
close(sock);

这是服务器端。

sin_size = sizeof(struct sockaddr_in);

//accept
connected = accept(sock, (struct sockaddr *)&client_addr,&sin_size);

printf("\n I got a connection from (%s , %d)", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));

//recv
bytes_recieved = recv(connected, recv_data, 1024,0);

recv_data[bytes_recieved] = '\0';

printf("\n RECIEVED DATA = %s " , recv_data);

cod = encipher(recv_data, key, 1); //printf("Code: %s\n", cod);
dec = encipher(cod, key, 0); //printf("Back: %s\n", dec);

//send
send(connected, cod, strlen(cod), 0);
send(connected, dec, strlen(dec), 0);

所以问题是,我想从客户端发送两个名为“plaintext”和“key”的字符串。在服务器端,我希望它接收两个字符串并在 encipher() 函数下对其进行处理,然后将其发送回客户端。

如何从客户端发送两个字符串并从服务器接收两个字符串?

4

2 回答 2

1

我会先发送字符串,然后让服务器向客户端写回它收到它的确认。然后客户端可以发送密钥,服务器可以做它需要的并将消息返回给客户端。如果您保持套接字连接打开,您可以继续从/到连接的任一端发送和接收信息,send()并且recv(). 根据字符串的结构,有多种方法。您可以在发送到服务器的数据中使用分隔符来指示字符串的结尾,以便剩下的部分是您的密钥 - 这将允许服务器在一个数据包中接收数据并在一个数据包中回复。我不确定是否有正确的方法来做到这一点-您必须根据应用程序的需要来决定。无论哪种方式,您都应该检查套接字函数的返回值,以检查您正在获取和发送您认为的内容。

于 2012-06-13T17:04:47.100 回答
0

发送一个包含第一个字符串大小的 16 位短字符串,然后是第一个字符串,然后是另一个包含第二个字符串大小的短字符串,然后是第二个字符串。在服务器上,读取一个 16 位 int 然后读取那么多字节,然后对第二个字符串执行相同的操作。

于 2012-06-13T17:08:46.733 回答