使用套接字逐个发送多个字符串时出现问题

时间:2011-03-11 10:02:06

标签: c sockets read-write

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

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

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

sendString(serversocket,"str2"); 

sendString(serversocket,"str3"); 

//server.c

char *buff=readstring(clientsocket);

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

需要获得str1str2str3 ...

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

3 个答案:

答案 0 :(得分:3)

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

对于字符串,您可以在例如这两种方式之一:

客户端:

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

服务器:

  • 读取整数长度
  • 将此字节数读入字符串

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

客户端:

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

服务器:

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

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

  • 每次调用recv()
  • 时,服务器都会收到1个字节
  • 服务器通过一次调用recv()
  • 接收所有数据

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

sendString(serversocket,"str2\n"); 

sendString(serversocket,"str3\n"); 

然后,您可以使用类似strtok的内容将输入数据整理到其组件逻辑数据包中。