我正在研究客户端服务器项目,我必须从服务器端的文件中搜索客户端请求的数据。
我在客户端的代码:
printf("Enter data to search: \n");
fgets(buf,sizeof(buf),stdin);
send(s,buf, strlen(buf),0);
printf("Result of your search: ");
if(len = recv(s, buf, sizeof(buf),0)>0)
printf("\nMessage Received From Server -\n %s\n",buf);
我在服务器端的代码:
fp=fopen("courses.txt","r");
len=recv(new_s,buf,sizeof(buf),0);
char temp[256],tmp[512];
char *search;
while(fgets(tmp, 512, fp)!=NULL)
{
search= strstr(tmp, buf);
if(search)
{
send(new_s,tmp,strlen(tmp),0);
}
}
strstr()始终返回null值,因此它永远不会进入if语句。
答案 0 :(得分:2)
TCP不是消息协议。如果要发送和接收消息(您的查询是),则需要消息协议。首先准确定义消息的界限(在字节级别),然后编写代码以发送和接收消息。
另外,请勿忽略recv
的返回值。你怎么知道你收到了多少字节?除了C风格的字符串外,不要使用strlen
和strcpy
等函数。为方便起见,您可以使发送和接收消息函数获取并返回C样式的字符串。但是,不要假设线上的数据将是C风格的字符串,直到您的代码成为一个。