このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
今日はプロキシとしての実装を行う。
クライアントから接続があった場合、
代行してサーバに接続する。
auto_ptr<Socket> client(listener->Accept());
sockaddr_in sa;
memset(&addr, 0, sizeof(sockaddr_in));
sa.sin_family = AF_INET;
sa.sin_port = htons(21);
sa.sin_addr.s_addr = inet_addr("192.168.0.77");
auto_ptr<Socket> server(new Socket(AF_INET, SOCK_STREAM, 0));
server->Connect(sa);
通信の始まり~始まり~。
まずはバッファとか準備。
char buffer[256] = { '\0' };
int size = 0;
Socket *sockets[2] = { client.get(), server.get() };
クライアントかサーバかどちらかが通信してくるはず。
WaitAny で二つの通信を監視し、
クライアントからの通信をサーバへ、
サーバからの返信をクライアントへ転送する。
do {
// WaitAny は select のラッパ
int index = Socket::WaitAny(TransmissionDirection::Incoming, sockets, 2);
switch (index) {
case 0: // client
size = client->Read(buffer, 256);
if (size == 0) break;
server->Send(buffer, size);
break;
case 1: // server
size = server->Read(buffer, 256);
if (size == 0) break;
client->Send(buffer, size);
break;
}
} while (size != 0);
テストっと。問題なくつながった。
これで、クライアントから見れば
直接サーバとつないでるのとほとんど変わらない。
ロジックを仕込んでないので、
データ通信ができないのは変わらないけど、
今のところいい感じかも。