コンテンツ

Activity

リンク

Comment

雑記に戻る

2004/02/22(日)

C# で SSTP

あー、1日あいてしまいましたね。まぁそれはいいとして、みら〜じゅでデバッグ情報を SSTP で流すようにしてみた(ちょっとした情報を出す場合は途中で処理が中断しないためダイアログよりも便利。)のでC#で SSTP 通信を行ううサンプル。


using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

class SSTP {
    private static Socket GetSSTPSocket( string server, int port ) {
        Socket      sstpSocet = null;
        IPHostEntry hostEntry = null;
        hostEntry = Dns.Resolve(server);

        foreach(IPAddress address in hostEntry.AddressList) {
            IPEndPoint ipe = new IPEndPoint(address, port);
            Socket tempSocket = 
                new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            tempSocket.Connect(ipe);
            if(tempSocket.Connected) {
                sstpSocet = tempSocket;
                return sstpSocet;
            }
        }
        return null;
    }

    private static string Send( string sendMessage ) {
        Encoding sjisEnc  = System.Text.Encoding.GetEncoding("Shift_JIS");
        byte[] bytesSent = sjisEnc.GetBytes(sendMessage);
        Socket sstpSocet = GetSSTPSocket( "127.0.0.1", 9801 );

        try {
            int bytes = 0;
            Byte[] bytesReceived = new Byte[256];
            string result = "";

            sstpSocet.Send(bytesSent, bytesSent.Length, 0);
            do {
                bytes = sstpSocet.Receive(bytesReceived, bytesReceived.Length, 0);
                result += sjisEnc.GetString(bytesReceived, 0, bytes);
            } while (bytes > 0);
            return result;
        }
        finally {
            if( sstpSocet != null ) {
                sstpSocet.Shutdown( SocketShutdown.Both );
                sstpSocet.Close();
            }
        }
    }

    static void Main() {
        Console.Write( "Sakura Script : " );
        string msg = "SEND SSTP/1.1\r\n"
            + "Sender: SSTP Sample Client\r\n"
            + "Script: "+ Console.ReadLine() +"\r\n"
            + "Charset: SJIS\r\n"
            + "\r\n";
        Console.WriteLine( Send(msg) );
    }
}

例外処理は省いています。適宜追加してください。

SSTP が何か分からない人はうさださくらとかSSP BUGTRAQとかCROWあたりを参照してください。なお、 CROW にこのコードで SSTP 通信を行うとフリーズすることがあります。詳しく調査していないためどちらに原因があるか分かりません。

コメントを追加

名前、コメントは必須です。HTMLタグ、実態参照文字は使うことが出来ません。クッキーは年内対応予定。URI,メールアドレスはリンクを張ります。

名前 : 
Mail : 
Web : 

goto Top

Copyright(C)方位記号

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル