比较从C中的套接字接收的字符串数据

时间:2009-03-07 01:13:45

标签: c++ c sockets

我对套接字有疑问。我有这段代码:

while(bytes = recv(sClient, cClientMessage, 599, 0)){

这会将它收到的消息放入cClientMessage中,并且消息始终为“Message”。我如何制作像if(cClientMessage == "Message"){//do func}这样的if语句。现在这段代码不会执行我想要的功能。我认为这是因为它没有收到正确的信息。有人能帮助我吗?

2 个答案:

答案 0 :(得分:4)

尝试:

if( strcmp( cClientMessage, "Message")) == 0 ) {
   // do something
}

编辑,遵循strager的建议:

更好的解决方案是使用memcmp:

,它不依赖于接收的数据为空终止
if( memcmp( cClientMessage, "Message", strlen( "Message") )) == 0 ) {
   // do something
}

答案 1 :(得分:2)

首先,您编写的代码中存在错误:

while(bytes = recv(sClient, cClientMessage, 599, 0)){

这是错误的,因为如果存在套接字错误,并且您的代码将导致无限循环,则recv将返回非零值。特别要检查> 0

char cClientMessage[599];
while((bytes = recv(sClient, cClientMessage, sizeof(cClientMessage), 0)) > 0)
{
  if(strlen("Message") == bytes && !strncmp("Message", cClientMessage, bytes))
  {
    //cClientMesssage contains "Message"
  }
} 

if(bytes == 0)
{
  //socket was gracefully closed
}
else if(bytes < 0)
{
  //socket error occurred
}

你做了什么的问题:cClientMessage ==“消息”是如果你将char *与字符串文字或char []与字符串文字进行比较,那么你将比较指针地址而不是实际内容。