【发布时间】:2018-03-06 23:25:45
【问题描述】:
我正在开发客户端服务器项目,我必须从服务器端的文件中搜索客户端请求的数据。
我在客户端的代码:
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() 总是返回一个空值,因此它永远不会进入 if 语句。
【问题讨论】:
-
什么不完全有效?
-
“似乎不起作用”不是一个充分的问题陈述。请证明minimal reproducible example。
-
@a_s741 fgets 追加换行符 '\n' 我认为你应该像 buf[ strcspn( buf, "\n" ) ] = '\0'; 一样删除它
-
你有两个问题。一是你忽略了
recv的返回值,所以你不知道你收到了多少字节。但另一个更基本——您没有任何协议来指定如何交换消息。这似乎是您的用例的要求。查询是一条消息,所以你需要一个消息协议,而 TCP 不是。 -
@VladfromMoscow 但是在你可以使用
strcspn之前,他必须已经将它转换成一个C风格的字符串。这对我来说似乎有点不合逻辑和倒退。 (因为无论如何他都需要找到换行符将其转换为字符串。)
标签: c tcp client-server