Я хочу сделать сервер, который отвечает на мои сокеты.
У меня есть такой код:
#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"); }
Теперь это не работает. и я не знаю почему. Я пытаюсь что-то искать в Интернете (с плохими результатами).
Как я могу сделать это работает? Я готов изменить весь код.
Вы не можете сравнить строки в стиле 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
}