在C中使用套接字时的字符串比较

时间:2015-06-23 11:14:48

标签: c sockets strcmp

我似乎无法找到解决方案,大多数人都有以下内容,但这对我不起作用。

int sock_fd;
int new_fd;
int rc;
char recv_client_msg[100];

rc=read(new_fd, recv_client_msg, sizeof(recv_client_msg));

if(rc>0)
 {
   if(strcmp(recv_client_msg, "s1p1")==0) {printf("s1p1\n"); }
   if(recv_client_msg[0]=="s") {printf("m\n");}
 }     

我的套接字功能完全正常。当客户端打开时,如果按“m”键,程序将在本地终端上打印“m”。 但是,当我打开客户端时输入“s1p1”时,我想在本地终端上打印“s1p1”。 但是,尽管阅读了之前的示例并且编译成功,但这并没有发生。

任何提示都将不胜感激

我的理论是它可能与处理第一个字符“s”的程序有关,但是当我输入“1”时,第一个“s”被“1”覆盖而不是占用第二个插槽在字符串中。

2 个答案:

答案 0 :(得分:1)

一些注意事项:

  1. 要通过网络读取/发送数据,您需要thisthis等功能。因为发送和接收并不总是发送/接收你告诉他们的数量。

  2. 您似乎使用了未初始化的变量new_fd,看起来不太好。

  3. 最后,在确保收到已发送的所有数据后(使用我在(1)中提到的方法),比较字符串不是问题 - 您可以只使用strcmp,假设字符串无效终止。

答案 1 :(得分:-1)

使用memcmp()代替strcmp()函数要求两个参数都被nul终止,这在通过套接字传递字符串时无法保证,您可以使用memcmp()它将要比较的字节数作为参数。

if (((rc == 4) || (rc == 5)) && (memcmp(recv_client_msg, "s1p1", rc) == 0))
    printf("s1p1\n");

执行(rc == 5)测试,因为如果存在nul终止字节,那么比较也应该为真。