サンデープログラマになろうと宣言しておきながら、今週末は私用で外出してしまうので、平日に試したことを書く。
まずは、Formを作ってからSocket接続を受けることが出来るか実験した。とりあえず、すぐに情報が見つかったWinsockから試してみる。人のページに記載されていることをそのままコピーしただけです。実験なので。
フォーム表示と同時にPop3Sクラスを生成する。
private: Pop3S^ pop3s; private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { pop3s = gcnew Pop3S(); }
その、Pop3Sクラスは実験用にコピペしただけ。
#include <winsock2.h> public ref class Pop3S { public: Pop3S(void); private: }; #pragma comment(lib, "WS2_32.LIB") extern "C" { int ttest() { WSADATA wsaData; SOCKET sock0; struct sockaddr_in addr; struct sockaddr_in client; int len; SOCKET sock; // winsock2の初期化 WSAStartup(MAKEWORD(2,0), &wsaData); // ソケットの作成 sock0 = socket(AF_INET, SOCK_STREAM, 0); // ソケットの設定 addr.sin_family = AF_INET; addr.sin_port = htons(12345); addr.sin_addr.S_un.S_addr = INADDR_ANY; bind(sock0, (struct sockaddr *)&addr, sizeof(addr)); // TCPクライアントからの接続要求を待てる状態にする listen(sock0, 5); // TCPクライアントからの接続要求を受け付ける len = sizeof(client); sock = accept(sock0, (struct sockaddr *)&client, &len); // 5文字送信 send(sock, "HELLO", 5, 0); // TCPセッションの終了 closesocket(sock); // winsock2の終了処理 WSACleanup(); return 0; } }; Pop3S::Pop3S(void) { ttest(); }
telnet localhost 12345 HELLO ホストとの接続が切断されました。
と表示されたので、とりあえず動くことは確認した。その後の動作がおかしいのは、適当に作りすぎているからだと思う。多分、開放が出来ていない。