Я недавно учусь программировать основной веб-сервер на c. Мой сервер, в зависимости от определенных входных данных, будет отправлять различные строки текста, которые заканчиваются пустой строкой, и мне нужно каким-то образом получать их со стороны клиента, чтобы отображать по одной строке за раз.
Прямо сейчас сервер делает что-то вроде
send(socket, sometext, strlen(sometext), 0)
send ...
send(socket, "\n", 2, 0);
....
Клиент:
В настоящее время я использую fdopen для переноса дескриптора файла сокета и чтения с помощью fgets:
FILE *response = fdopen(someSocket, "r");
while(1){
fgets(input, 500, response);
if(strcmp(input, "\n") != 0){
//do some stuff
}
else {
// break out of the loop
break;
}
}
Это все работает хорошо, за исключением того, что моей программе нужно выполнить одно условие, а именно: никогда не разрывать соединение с сокетом. Поскольку я открыл файл, чтобы остановить утечку памяти, следующая строка:
fclose(response);
Это, однако, корень моих проблем, потому что он не только закрывает файл, но и закрывает сокет, которого у меня не может быть. Кто-нибудь может дать мне какое-нибудь руководство по простым методам, чтобы обойти это? Я думал о том, чтобы, возможно, использовать recv (), но разве это не должно воспринимать все сообщение сразу? Есть ли способ воссоздать поведение fgets, используя recv?
Я действительно новичок во всем этом, спасибо за помощь!