VB.NETで、教科書通りにソケット通信。
- System.Net.Sockets.Socketクラスのインスタンスを作成、BeginAccept()でコネクションを待ち受け。
- 接続要求が来たらEndAcceptを呼んで返ってきたSystem.Net.Sockets.Socketクラスのインスタンスを保持。
- このインスタンスにBeginReceive()を呼んで、作成済みのdelegateをセットする。
- データが来るとdelegateが呼ばれるので、とりあえずSystem.Byteクラスの配列に格納。
- ある程度データが溜まったら、System.Text.Encoding.ASCII.GetString()でStringクラスに変換し処理する。
こうやってStringクラスに格納した受信データですが、Windows標準のtelnetだと問題無いのに、UTF-8 Teraterm Pro with TTSSH2 やPoderosa でデータを送ると、改行コードが変。¥r(13h)の後に正体不明の文字が。送信改行コードをCRにしてもCR+LFにしても出る。この文字、Microsoft.VisualBasic.AscW()で変換しません。何だコリャ?
今のところ受信データはASCIIテキストということで、以下の方法で除去。これで実用上問題無いけど、何か気になるな・・・str = System.Text.RegularExpressions.Regex.Replace(str, "[^0-9a-zA-Z!-/¥r¥n¥s]", "")
Comments