自分で解決できないmicrohttpdサーバーに問題があります。私はSQLiteデータベースからいくつかのデータを読んでおり、私はそれをjsonのようなフォーマットでフォーマットしてクライアントに送信しようとしています。Microhttpdサーバーがページを送信したくない
rc = sqlite3_exec(db, sql, callback, (void*)connection, &zErrMsg);
コールバック:
int callback(void *connection, int argc, char **argv, char **azColName)
{
int i;
for(i=0; i<argc; i++)
{
char *display_page=malloc(1000); /* Size will be changed to fit, this is for testing.*/
/* azColName = Name of the column in database */
/* argv = value of the column*/
sprintf(display_page, "{\"%s\":\"%s\",\"%s\":\"%s\",\"%s\":\"%s\"}\n",
azColName[i], argv[i] ? argv[i] : "NULL",
azColName[i+1], argv[i+1] ? argv[i+1] : "NULL",
azColName[i+2], argv[i+2] ? argv[i+2] : "NULL");
printf("disp page= %s\n", display_page);
if (!send_page(connection, display_page))
printf("failed\n");
free(display_page);
i+=2;
}
return 0;
}
送信ページ:
send_page (struct MHD_Connection *connection, char *page)
{
int ret;
struct MHD_Response *response;
response =
MHD_create_response_from_buffer (strlen (page), (void *) page,
MHD_RESPMEM_PERSISTENT);
if (!response)
return MHD_NO;
ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
printf("ret = %d\n", ret);
MHD_destroy_response (response);
return ret;
}
出力:
disp page= {"SUBJECT":"Todo1","DESCRIPTION":"asdf","URGENCY":"asdf"}
ret = 1
disp page= {"SUBJECT":"Todo2","DESCRIPTION":"NULL","URGENCY":"fdsa"}
ret = 0
failed
disp page= {"SUBJECT":"Todo3","DESCRIPTION":"qwer","URGENCY":"qwer"}
ret = 0
failed
問題はどこかMHD_queue_responseであるように思えるが、私は考えていますなぜ私はネットワーキングが初めてだからです。どんな助けもありがとう。
だけで無関係なクエリを、なぜ '私は' for'ループ文で、 '++、および' I + = 2 'ループ本体でください:だから、一度にすべてを送信するために大きなページを作成する必要があります?実際のfor文の中で単に 'i + = 3'をしないのはなぜですか? –
さて、それは反復ごとに1つのキー/ valペアであると考えられていましたが、私は最近それを変更し、下部にi + = 2を追加しました。それはリファクタで修正されるだろうが、それを指摘してくれてありがとう。 – Mirakurun