У меня есть серверный / клиентский TCP-сервер, который может выполнять эти задачи; -Когда клиент отправляет команду LIST на сервер, сервер перечисляет все подключенные клиенты с их идентификатором и отправляет эту информацию обратно клиенту, -Клиент отправляет зашифрованное сообщение и идентификатор клиента на сервер -Сервер получает зашифрованное сообщение, сохраните его в базу данных в виде сообщений и отправьте сообщение другому клиенту. - Другой клиент получает и расшифровывает сообщение
Что я пытаюсь сделать; - Когда клиент отправляет команду HISTORY на сервер, сервер должен прочитать базу данных сообщений, вставить эти сообщения в строку или массив символов и отправить эту строку или массив символов клиенту через сокет.
Проблема в том, что; -При попытке выбрать сообщения из базы данных и записать эти значения в строку, используя функцию обратного вызова sqlite3_exe c, она записывает только одну строку в строку при каждом запуске, и в конце функции обратного вызова у меня есть строка, которая включает в себя только последнее сообщение из базы данных.
Функция показа истории:
void showHistory(){
sqlite3* DB;
char* messaggeError;
int exit = 0;
exit = sqlite3_open("SERVER.db", &DB);
if (exit) {
cerr << "Error open DB " << sqlite3_errmsg(DB) << endl;
}
string sql("SELECT * FROM messageHistory");
int exit3;
exit3 = sqlite3_exec(DB, sql.c_str(), callBackHistory, 0, &messaggeError);
if (exit3 != SQLITE_OK) {
cerr << "Error Insert" << endl;
sqlite3_free(messaggeError);
}
sqlite3_close(DB);
}
Функция обратного вызова:
int callBackHistory(void* data, int argc, char** argv, char** azColName) {
int i;
int offset = 0;
string s;
for (i = 0; i < argc; i++) {
s += argv[i] + '\n' ;
}
cout << "--->" << s << "<---" ;
return 0;
}
вывод:
> --->1NTU1GRFNGU0RGU0RGU0RBRg==
<------>k=
<------>ZZRkZZRA==
<------>ZZRkZZRA==
<------>ZZRkZZRA==
<------>VFRQ==
<------>==
Здесь, из команды *cout << "--->" << s << "<---" ;*
в функции обратного вызова, вывод должен быть таким: *"--->message1(newline) message2 (newline) message3 (newline) ... <---"*
, но здесь вывод - *--->message1(newline)<--- --->message2(newline)<--- --->message3(newline)<---*
, и если я попытаюсь чтобы отправить его клиенту через сокет, я могу только послать message3 в качестве последней строки сообщения базы данных.
Я надеюсь, что вопрос можно понять хорошо, любая помощь будет полезна, большое спасибо :)