在C Socket中发送和接收两个字符串

时间:2012-06-13 16:43:13

标签: c sockets

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

//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()函数下处理它,然后将其发送回客户端。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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