【发布时间】:2015-06-23 11:14:47
【问题描述】:
我似乎找不到解决方案,大多数人都有以下问题,但这对我不起作用。
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”覆盖而不是占用第二个插槽在字符串中。
【问题讨论】:
-
添加一个
printf( "rc = %d\n", rc );怎么样? -
什么是'new_fd',如果未初始化可以吗?
-
添加
printf("'%.*s'\n", rc, recv_client_msg);应该会告诉您出了什么问题。 -
确保您收到的字节数至少与您打算处理的一样多,如果您要比较字符串,最好确保它们是 NUL 终止的,就像 C 字符串一样。
-
大多数人没有这个。在 recv() 调用周围有一个循环,在字节进入时组装缓冲区并检查终止的 '\n'。 TCP 不传输字符串或消息,只是流中的字节。