これは、ソケットが作成され、受信したデータがテキスト ファイルに格納されるコードです。
// Initialize Winsock.
cout << "connecting1\n";
WSADATA wsadata;
int iResult = WSAStartup (MAKEWORD(2,2), &wsadata );
if (iResult !=NO_ERROR )
printf("\nmyERROR at WSAStartup()\n");
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
perror("error opening socket"); return -1;
}
struct sockaddr_in sin;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = inet_addr(host.c_str());
sin.sin_family = AF_INET;
if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
perror("error connecting to host"); return -1;
}
const int query_len = query.length() + 1; // trailing '\0'
if (send(sock, query.c_str(), query_len, 0) != query_len) {
perror("error sending query"); return -1;
}
const int buf_size = 1024 * 1024;
while (true) {
std::vector<char> buf(buf_size, '\0');
const int recv_len = recv(sock, &buf[0], buf_size - 1, 0);
if (recv_len == -1) {
perror("error receiving response"); return -1;
} else if (recv_len == 0) {
std::cout << std::endl; break;
} else {
std::cout << &buf[0];
fprintf(fp, "%s", &buf[0]); // this lines writes to file
}
}
ここでは、データはほとんど適切な形式で返されますが、場合によっては次のようになります。
{
"type": "node",
"id":
1000 // this 1000 is un-wanted
1812432236,
"lat": 20.2608987,
"lon": 85.8379894
},
そのため、私のプログラムはこのノードを正しく解析できません。URLでクエリを書いている間、データは適切な形式で表示されます。また、プログラムを実行するたびにガベージ値が同じ場所に挿入されます。なぜこれが起こっているのでしょうか?