Как передавать по сети структуры MYSQL?
Второй час вожусь, не могу понять как отправить структуру MYSQL_RES
Сервер:
MYSQL_RES *result;
mysql_query(conn,"запрос");
result=mysql_store_result(conn);
send(sock,result,sizeof(*result),0);
Клиент:
MYSQL_ROW row;
MYSQL_RES res;
recv(sock,&res,sizeof(res),0);
row=mysql_fetch_row(&res);
//| |
//V V
printf("row:%s\n",row[0]); //Здесь выводится ошибка сегментирования
На ошибки проверяю - их нет, что я делаю неправильно?
Ответы (1 шт):
Два замечания к Вашему коду.
Первое:
Лучше написать вот так:
send(sock,result,sizeof(MYSQL_RES),0);
По крайней мере, я понимаю однозначно, что здесь получится.
Второе - принципиальное.
Предположим, что "на том конце" Вы получили структуру MYSQL_RES. Правильно даже получили. И что? Разве эта структура содержит данные, полученные с SQL сервера? Нет. Она содержит ссылку на struct MYSQL_DATA * data И зачем вам эта ссылка ?! Она указывает на область памяти того компьютера, который выполнил send(). Как вы из памяти компьютера выполнившего recv() получите доступ к этой памяти ?! Никак...
Поэтому, выход тут только один: доставать с сервера данные а не их описатели и передавать конкретно данные.