.NET Compact Framework の Socket で SSL をつかう

.NET FrameworkSSL を使ったソケット通信をするときは NetworkStream を SslStream にラップして使うのが一般的なのですが、.NET Compact Framework にはいつものようにこのクラスが存在しません。

そこで利用できるのがこのサンプルにあるSslHelperというクラス。

Enable SSL for managed socket on windows mobile - Random.Next() - Site Home - MSDN Blogs

SslHelperを使うと初期化したソケットをSslHelperのコンストラクタに指定して呼び出すだけでSSL接続になります。

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SslHelper sslHelper = new SslHelper(socket , Server.Name);
IAsyncCallback ar = m_socket .BeginConnect(server.GetEndPoint(), new AsyncCallback(OnConnected), socket);

ただ、注意しないといけない点があって、受信待機で NetworkStream.DetaAvaliable や Socket.Available だけでデータを確認している場合は受信データがいつまでたってもこない状態になってしまいます。Socket.Pollを使いましょう。

socket.Poll(100, SelectMode.SelectRead);

.NET Compact Framework の Socket で SSL をつかう - 伊勢的WM - Windows Phone アプリ開発グループ より