我对套接字有疑问。我有这段代码:
while(bytes = recv(sClient, cClientMessage, 599, 0)){
这会将它收到的消息放入cClientMessage中,并且消息始终为“Message”。我如何制作像if(cClientMessage == "Message"){//do func}
这样的if语句。现在这段代码不会执行我想要的功能。我认为这是因为它没有收到正确的信息。有人能帮助我吗?
答案 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 []与字符串文字进行比较,那么你将比较指针地址而不是实际内容。