2011-03-11 22 views
1

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

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

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

sendString(serversocket,"str2"); 

sendString(serversocket,"str3"); 

//server.c 

char *buff=readstring(clientsocket); 

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

需要去str1str2str3 ...

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

回答

3

TCP套接字是字节流 - 您将不得不在接收端拆分数据。

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

客户:

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

服务器:

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

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

客户:

  • 发送一个字符串后面是0字节

服务器:

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

你将不得不同时处理这两种情况在服务器端:

  • 服务器接收每次调用recv()
  • 服务器1个字节接收一个呼叫的所有数据recv()
+0

谢谢埃里克.....我实施了这个,这工作得很好......学习需要处理你提到的以上两种情况... – Muse 2011-03-11 10:59:36

0

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

0

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

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

sendString(serversocket,"str2\n"); 

sendString(serversocket,"str3\n"); 

然后,您可以使用类似strtok砍输入数据到它的组件的逻辑分组。

相关问题