あー、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,メールアドレスはリンクを張ります。
Copyright(C)方位記号