プロキシ サーバーを構築しようとしています。
クライアントからの受信 -> サーバーへの送信 -> サーバーからの受信 -> クライアントへの送信。
プロキシは、クライアントから正しいデータを受け取ります。
しかしその後、サーバーから 0 バイトを受信しました。
これは、クライアントから受信してサーバーに送信する必要があるパケットです
0A 00 2C 01 23 00 0C 00 B3 01
これが私のコードです。
//intercept commu by server <-> client
memset(buffer, 0, buffer_len);
//recv from client
if((bytecount = recv(*csock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Err: receiving data %d\n", errno);
return 0;
}
//display what we got from the client
printf("Received bytes %d\n", bytecount);
for ( int i = 0; i < bytecount; i++ ) {
printf( "%02x ", static_cast<unsigned char>( buffer[i] ) );
}
printf("\n");
//send to server what we got from the client
if((gbytecount=send(gsock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Error sending data %d\n", errno);
goto FINISH;
}
//recv from server
if((gbytecount = recv(gsock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Error receiving data %d\n", errno);
return 0;
}
printf("Received bytes %d\n", gbytecount);
for ( int i = 0; i < gbytecount; i++ ) {
printf( "%02x ", static_cast<unsigned char>( buffer[i] ) );
}
printf("\n");
//send back to client what we got from the server
if((bytecount = send(*csock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Err: sending data %d\n", errno);
return 0;
}
クライアントからの受信後にプロキシがサーバーに送信しているものを確認するにはどうすればよいですか?
そして、私の論理に何か問題がありますか?
アップデート
私は問題を見つけたと思います.buffer_lenが原因です。
これで、recv() バイトは 93 になりました。しかし、サーバーは再び別のパケットを送信します。
コードをどうするか?
現在、私のコードは次のとおりです。
recv from client -> send to server -> recv from server -> send to client.
このコードを次のようにするにはどうすればよいですか
他に転送しますか?
アップデート
解決しなきゃ。ありがとう。