1

我是套接字编程的新手。需要将多个字符串一一发送到服务器并收集结果字符串。

现在的问题是在客户端使用发送/写入功能,所有字符串都是从服务器一次性读取的。

//client.c
sendString(serversocket,"str1"); 

sendString(serversocket,"str2"); 

sendString(serversocket,"str3"); 

//server.c

char *buff=readstring(clientsocket);

printf("%s",buff) ;//output : str1str2str2

需要得到str1str2并且str3...

我需要一个接一个地接收它。我怎样才能做到这一点?任何帮助,将不胜感激。

4

3 回答 3

3

TCP 套接字是一个字节流- 您必须在接收端拆分数据。

对于字符串,您可以通过以下两种方式之一执行此操作:

客户:

  • 发送整数长度
  • 发送字符串数据

服务器:

  • 读取整数长度
  • 将这个字节数读入一个字符串

或者,您可以使用 0-终止:

客户:

  • 发送一个字符串,后跟一个 0 字节

服务器:

  • 尽可能多地读取,扫描0字节,提取字符串

您必须在服务器端处理这两种情况:

  • 服务器每次调用接收 1 个字节recv()
  • 服务器在一次调用中接收所有数据recv()
于 2011-03-11T10:05:00.723 回答
0

我假设你在这里使用 TCP。在这种情况下,发送到套接字的任何内容都被视为流。因此,您必须在流中添加分隔符才能拆分字符串。您可以在每个字符串之后发送一个换行符,然后解析输入以再次拆分行。

于 2011-03-11T10:05:42.003 回答
0

由于 TCP 是一个字节流,因此您需要分隔数据片段,即逻辑数据包。在这种情况下,换行符“\n”可能是最明显的选择,或者您可以使用空字符“\0”。

//client.c
sendString(serversocket,"str1\n"); 

sendString(serversocket,"str2\n"); 

sendString(serversocket,"str3\n"); 

然后,您可以使用strtok之类的东西将输入数据分割成它的组件逻辑数据包。

于 2011-03-11T10:15:33.910 回答