C ++服务器正确回复

时间:2015-04-18 11:54:50

标签: c++ windows sockets server reply

我想创建一个回复我的套接字的服务器。 我有这样的代码:

#define DEFAULT_BUFLEN 512

    /*...*/
int iResult;
int iSendResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;  

    /*...*/     

iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (recvbuf == "hello"){
    iSendResult = send(ClientSocket, "Hi Client", sizeof("Hi Client"), 0);

}else {printf("[ERROR]Unexpected Socket.\n"); }

现在,它不起作用。而我现在不知道为什么。我试着在网上搜索一些东西(结果不好)。 我怎样才能使它有效?我愿意改变所有代码。

1 个答案:

答案 0 :(得分:1)

您无法将C风格的字符串与==进行比较。您将缓冲区的地址与静态字符串文字的地址进行比较,该地址始终不相等。

您还需要处理这样一个事实,即每次从流套接字读取(假设这是什么)可能会提供比您预期更多或更少的数据。

更正确的比较可能是

if (iResult < 0) {
    // Some kind of read error, check errno for details
} else if (iResult == 0) {
    // Socket was closed
} else if (iResult < 5) {
    // Not enough input: read some more or give up
} else if (std::equal(recvbuf, recvbuf+5, "hello")) {
    // Expected input: there might be more data to process
} else {
    // Unexpected input
}