ファイル名 | 説明 |
BSocket.dll | BASP21 Pro ソケット オブジェクト本体。動作に必要なDLL はこれのみです。 |
BSocket.tlb | Visual C++ でBASP21 Pro ソケット オブジェクトを呼出すときに#importで 指定するタイプライブラリ。Visual C++でオブジェクトを使用しない場合は、不要です。 |
regsvr32 c:\b21\BSocket.dll regsvr32 c:\b21\x64\BSocket.dll ..... x64版Visual C++でオブジェクトを使用する場合は、BSocket.tlbをフォルダにコピーします。
1. regsvr32 /u c:\b21\BSocket.dll regsvr32 /u c:\b21\x64\BSocket.dll ..... x64版 2. BSocket.dllをフォルダから削除します。
Set bsocket = Server.CreateObject("basp21pro.socket") ' ASP Set bsocket = CreateObject("basp21pro.socket") ' VBA や VB Set bsocket = WScript.CreateObject("basp21pro.socket") ' WSH作成したオブジェクトでメソッドを呼出します。
変数 = bsocket.メソッド名(パラメータ)C#でのコンパイル方法は、以下のように/Rでアセンブリファイルを指定します。
csc /R:BSOCKETLib.dll C#ソースファイル名
Imain bobj = new main();
Connect Close BinaryRead BinaryWrite Debug DebugClear |
GetProxy Read Read2 ReadLine ReadLine2 |
SSLConnect SSLHandShake Write WriteHex |
LogFile Result |
rc = bsocket.Connect(dest,port[,timeout]) 引数 dest [in] : 接続先のIPアドレスまたはネットワークホスト名。 port [in] : ポート番号。 timeout [in] : 通信タイムアウト値を秒単位で指定。省略値(120)。 rc [out] : 結果コードが数字で返されます。 0 : 接続OK 0以上 : Winsock Error 11001 ホスト名が見つからない 10061 ポート番号に対応したアプリケーションがない、またはシャットダウン中 -1 : ソケットオープンエラー -2 : タイムアウト -99 : basp21p.ini ファイルが見つからないか、ライセンスキーの誤り 解説 ホストとの接続を確立します。 IPv6接続の場合は、basp21p.ini ファイルに ipv6パラメータの指定が必要です。 basp21p.iniファイル [global] ipv6=1 IPv6アドレスは、中括弧で囲んで指定します。 この場合は、ipv6パラメータの設定は不要です。 例 [2001::34] ipv6パラメータは、バージョン 1,0,1705,9以降でサポートされます。 使用例 rc = bsocket.Connect("www.hogehoge.com",80) 関連項目
bsocket.Close() 引数 なし。 解説 接続を切断します。 使用例 bsocket.Close() 関連項目
barray = bsocket.BinaryRead(fname[,offset[,len]]) 引数 fname [in] : ファイル名をフルパスで指定します。 offset [in] : オフセット。既定値は 0。 len [in] : 読込みバイト数。既定値は0で、すべてのバイト数。 barray [out] : バイナリが配列で返ります。 bsocket.Resultプロパティに結果コードが数字で返されます。 1以上 : 正常終了。読込みバイト数 -1 : ファイルオープンエラー -2 : ファイルサイズが0 -3 : オフセット値オーバー -4 : メモリ不足エラー -5 : ファイルアクセスエラー -6 : ファイル読込みエラー 解説 バイナリデータを変数に読込むときに使います。 ソケットを操作するメソッドではありません。 使用例 barray = bsocket.BinaryRead(bsocket.Home & "h.xls") 関連項目 BinaryWriteメソッド
wlen = bsocket.BinaryWrite(barray,fname[,mode]) 引数 barray [in] : 1バイトの配列を渡します。 fname [in] : ファイル名をフルパスで指定します。 mode [in] : 上書きモード。0 : 新規作成。 1 : 追加書込み。 省略すると新規作成。 wlen [out] : 書込み後のファイルサイズが返ります。 0未満の値はエラーです。 -1 : バイト配列エラー -2 : ファイルオープンエラー -3 : ファイルアクセスエラー -4 : ファイル書込みエラー 解説 ソケットを操作するメソッドではありません。 使用例 wlen = bsocket.BinaryWrite(barray,"g:\h2.jpg") wlen = bsocket.BinaryWrite(barray,"g:\h2.jpg",1) ' 追加書込み 関連項目 BinaryReadメソッド
bsocket.Debug(str) 引数 str [in] : 書込みたい文字列を指定します。 解説 クライアントサイドでスクリプトのデバッグなどで使います。 まず、ウインドウタイトル[BSocket Debug] のメモ帳アプリケーションを探し、 見つからない場合、[無題]のメモ帳アプリケーションが選択されます。 実行後は、選択されたメモ帳のタイトルは、[BSocket Debug] となります。 使用例 bsocket.DebugClear 1 ' メモ帳ウインドウが起動されてなければ起動 bsocket.Debug "Hello World" ' おなじみ 関連項目 DebugClearメソッド
bsocket.DebugClear [opt] 引数 opt [in] : メモ帳が起動していなければ、起動して待つ秒数。 既定値は、 0 で起動しません。 解説 まず、ウインドウタイトル[BSocket Debug] のメモ帳アプリケーションを探し、 見つからない場合、[無題]のメモ帳アプリケーションが選択されます。 [無題]ウインドウも見つからない場合は、秒数が指定されていれば起動して、 その秒数待ちます。 実行後は、選択または起動されたメモ帳のタイトルは、[BSocket Debug] となります。 使用例 bsocket.DebugClear 1 ' メモ帳ウインドウ起動 関連項目 Debugメソッド
string = bsocket.GetProxy(type) 引数 type [in] : 種類名。"http" "https"または"ftp"を指定します。 ""を指定すると設定されているすべての種類を取得します。 解説 IEのインターネットのオプションでプロクシ設定が有効の場合のみ取得可能です。 ソケットを操作するメソッドではありません。 IISのASPおよびASP.NET環境では動作しません。 使用例 proxy = bsocket.GetProxy("http") 関連項目
rc = bsocket.Read(data[,mode]) 引数 data [in] : データを受取る変数。Visual BasicではVariantを指定します。 mode [in] : 受取るデータ形式を次のように指定します。 0 : 文字列(省略値) 1 : バイナリ。1バイトの配列でデータが返されます。 2 : 16進形式の文字列。 16 : 文字列。到着したデータをピークします。データは、バッファに残します。 17 : バイナリのピーク。 18 : 16進形式のピーク。 rc [out] : 結果コードが数字で返されます。 0 : 受信OK 0以上 : Winsock Error -1 : ソケットクローズ -2 : タイムアウト -3 : データなし 解説 JScriptでは Read2 メソッドを使ってください。 使用例 rc = bsocket.Read(0) 関連項目
data = bsocket.Read2([mode]) 引数 data = bsocket.Read2([mode]) data [out] : データを受取る変数。Visual BasicではVariantを指定します。 mode [in] : 受取るデータ形式を次のように指定します。 0 : 文字列(省略値) 1 : バイナリ。1バイトの配列でデータが返されます。 2 : 16進形式の文字列。 16 : 文字列。到着したデータをピークします。データは、バッファに残します。 17 : バイナリのピーク。 18 : 16進形式のピーク。 bsocket.Resultプロパティに結果コードが数字で返されます。 0 : 受信OK 0以上 : Winsock Error -1 : ソケットクローズ -2 : タイムアウト -3 : データなし 解説 使用例 data = bsocket.Read2(0) 関連項目
rc = bsocket.ReadLine(data) 引数 data [in] : データを受取る変数。Visual BasicではVariantを指定します。 改行コードが削除されて渡されます rc [out] : 結果コードが数字で返されます。 0 : 受信OK 0以上 : Winsock Error -1 : ソケットクローズ -2 : タイムアウト -3 : データなし 解説 JScriptでは ReadLine2 メソッドを使ってください。 使用例 rc = bsocket.ReadLine(data) 関連項目
data = bsocket.ReadLine2() 引数 data [out] : データを受取る変数。Visual BasicではVariantを指定します。 改行コードが削除されて渡されます bsocket.Resultプロパティに結果コードが数字で返されます。 0 : 受信OK 0以上 : Winsock Error -1 : ソケットクローズ -2 : タイムアウト -3 : データなし 解説 使用例 data = bsocket.ReadLine2() 関連項目
rc = bsocket.SSLConnect(dest,port[,timeout]) 引数 dest [in] : 接続先のIPアドレスまたはネットワークホスト名。 port [in] : ポート番号。 timeout [in] : 通信タイムアウト値を秒単位で指定。省略値(120)。 rc [out] : 結果コードが数字で返されます。 0 : 接続OK 0以上 : Winsock Error 11001 ホスト名が見つからない 10061 ポート番号に対応したアプリケーションがない、またはシャットダウン中 -1 : ソケットオープンエラー -2 : タイムアウト 解説 ホストとの接続を確立します。 SSL を使って通信を暗号化する場合には SSLConnect を使います。 SSLHandShakeメソッドでSSL セッションが開始されます。 使用例 rc = bsocket.SSLConnect("www.hogehoge.com",443) 関連項目 SSLHandShakeメソッド
rc = bsocket.SSLHandShake([mode][[server/]userpass]) 引数 mode [in] : SSLバージョン番号を指定。規定値は3。 "SSL=2" - SSLバージョン2。 server [in] : サーバ証明書を認証する場合にサーバ名を指定します。 省略可能です。 テスト用証明書で動作を確認する場合は省略してください。 userpass [in] : 他のユーザアカウントで実行したいときに指定します。 server を同時に指定する場合は、"/" で区切ります。 user:pass アカウント名とパスワードの間を":" で区切ります。 省略可能です。 rc [out] : 結果コードが数字で返されます。 0 : ハンドシェーク完了 -1 : ソケットオープンエラー -2 : タイムアウト -100 : 証明書期限切れ(サーバ名を指定した場合) -108 : ルートが認証できない証明書(サーバ名を指定した場合) -111 : 証明書失効(サーバ名を指定した場合) -112 : ルートが認証できないテスト証明書(サーバ名を指定した場合) -114 : サーバ名が一致しない(サーバ名を指定した場合) -2146893042 : アカウント権限不足。 以外 : Winsock または Secure API エラー 解説 事前にSSLConnectメソッドを実行する必要があります。 SSLHandShakeメソッド完了後に、Write系メソッド、Read系メソッドによる 暗号化通信が可能です。 IIS配下で実行する場合、匿名ユーザでは SSLHandShakeメソッドが失敗します。 AdminユーザまたはSystemユーザ権限を持つアカウントを指定する必要があります。 rc = bsocket.SSLHandShake("user1:pass1") プロクシを経由してSSL通信を行う場合は、SSLHandShakeメソッドは、 CONNECTコマンドデータ通信後に 呼出してください。 使用例 rc = bsocket.SSLConnect("www.hogehoge.com",443) rc = bsocket.SSLHandShake() ' テスト証明書でもOK rc = bsocket.SSLHandShake("www.hogehoge.com") ' 証明書を認証する 関連項目 SSLConnectメソッド
rc = bsocket.Write(data) 引数 data [in] : 送信データ変数。Visual BasicではVariantを指定します。 バイナリを送信する場合は、1バイト配列で指定します。 rc [out] : 結果コードが数字で返されます。 0 : 送信OK 0以上 : Winsock Error -1 : ソケットクローズ -2 : タイムアウト 解説 ファイルの内容を送信する場合は、BinaryReadメソッドで読込んだ変数を指定します。 bindata = bsocket.BinaryRead(fname) rc = bsocket.Write(bindata) 使用例 rc = bsocket.Write(data) 関連項目
rc = bsocket.WriteHex(data) 引数 data [in] : 送信データ変数。Visual BasicではStringを指定します。 rc [out] : 結果コードが数字で返されます。 0 : 送信OK 0以上 : Winsock Error -1 : ソケットクローズ -2 : タイムアウト 解説 バイナリデータを簡単に文字列で表現して指定するときに使います。 使用例 rc = bsocket.WriteHex("0001FFFF") 関連項目
bsocket.LogFile = string 引数 string [out] : ログファイル名をフルパスで指定します。 解説 メソッドの処理開始時と終了時の情報をログファイルに書込みます。 ファイルのアクセスエラーなどの詳細情報を記録します。 ログレコードの形式は、次のとおりです。 yyyy/mm/dd hh:mm:ss.sss nnn メソッド名 begin パラメータ yyyy/mm/dd hh:mm:ss.sss nnn メソッド名 end 終了情報 nnn: Win32 のスレッドID。メソッド呼出しをスレッド間で区別するために記録します。 ログファイルは、書き込み時に排他的に使われます。 使用例 bsocket.LogFile = "c:\ttemp\log.txt" 関連項目
number = bsocket.Result 引数 number [out] : メソッドの実行結果を数値で返します。 解説 値の意味は、呼出したメソッドにより異なります。 使用例 rc = bsocket.Result 関連項目
''==== httpget.vbs Set bsocket = WScript.CreateObject("basp21pro.socket") bsocket.DebugClear 1 proxy = bsocket.GetProxy("http") host = "www.hogehoge.com" server = host port = 80 path = "/data/images/good.jpg" if proxy <> "" then ' プロクシあり? path = "http://" & server & path a = Split(proxy,":") server = a(0) ' プロクシサーバ名 port = a(1) ' プロクシポート番号 end if rc1 = bsocket.Connect(server,port, 10) if rc1 <> 0 then bsocket.debug "connect error " & rc1 WScript.quit end if cmd = "GET " & path & " HTTP/1.0" host = "Host: " & host & vbCrLf rc1 = bsocket.write (cmd & vbCrLf & host & vbCrLf) if rc1 <> 0 then bsocket.debug "write error " & rc1 WScript.quit end if bsocket.readline datas bsocket.debug datas While rc1 = 0 And Len(datas) > 0 ' ヘッダーを読み飛ばす rc1 = bsocket.readline(datas) bsocket.debug datas Wend rc1 = bsocket.read(datax, 1) ' イメージをバイナリ読込み mode = 0: lenx = 0 While rc1 = 0 'ファイルに書込みます lenx = lenx + UBound(datax) + 1 rc1 = bsocket.BinaryWrite(datax, "c:\temp\good.jpg", mode) mode = mode + 1 rc1 = bsocket.read(datax, 1) Wend bsocket.debug "Done. " & lenx
''=== upload.vbs Set bsocket = WScript.CreateObject("basp21pro.socket") rc1 = bsocket.Connect("server.com", 80, 120) bsocket.debugclear 1 bsocket.debug rc1 fname = "c:\data\data.xls" ' アップロードするファイル名 cmd2 = "--sep" & vbCRLF & _ "Content-Disposition: form-data; name=""file1""; " & _ "filename=""" & fname & """" & vbCRLF & _ "Content-Type: text/plain" & vbCRLF & vbCRLF cmd3 = bsocket.BinaryRead(fname) ' 送信ファイルをバイナリで読みます cmd4 = vbCRLF & "--sep--" & vbCrLf conlen = len(cmd2) + Ubound(cmd3) + 1 + len(cmd4) ' 長さを求めます cmd1 = "POST /test/fileup.asp HTTP/1.0" & vbCRLF & _ "Content-Type: multipart/form-data; " & _ "boundary=""sep""" & vbCRLF & _ "Content-Length:" & conlen & vbCrLf & vbCrLf rc1 = bsocket.write (cmd1) rc1 = bsocket.write (cmd2) rc1 = bsocket.write (cmd3) ' バイナリもそのまま送れます rc1 = bsocket.write (cmd4) bsocket.debug cmd1 & cmd2 rc1 = bsocket.read(data) ' 結果を受信します bsocket.debug data
''=== telnet.vbs Set bsocket = Wscript.CreateObject("basp21pro.socket") bsocket.Debugclear 1 dim cmd ' 受信データバッファ グローバル変数 dim ps1 ' シェルプロンプト グローバル変数 ps1 = "$" ' Bシェルの場合 account = "guest" password = "hoge" svr="your.server" rc = bsocket.connect(svr,23,10) ' 接続 ポート23 タイムアウト10秒 TelnetNego ' telnet ネゴシエーション ' 16進モードだったので HexWait "6C6F67696E3A" ' ログインプロンプトlogin: を待ってアカウント名を送信 bsocket.Write account & vbcr ' ユーザアカウント送信 Wait "Password:" ' パスワードプロンプトPassword:を待つ bsocket.Write password & vbcr ' パスワード送信 Wait ps1 ' シェルプロンプト$を待つ res = Shell("cat .profile") ' シェルコマンド実行 bsocket.Debug res bsocket.Write "exit" & vbcr ' bye. bsocket.Debug "end of telnet session." WScript.Quit ' telnet ネゴシエーション Sub TelnetNego a ="FFFB18FFFD03FFFB03FFFD01FFFB1F" ' telnet ネゴシエートコマンド bsocket.WriteHex a Do While 1 ' telnet ネゴシエート開始 c = ReadCommand() ' 16進モードでコマンドを受信 bsocket.Debug c Select Case Mid(c,1,6) Case "FFFD20","FFFD23","FFFD27","FFFD01","FFFD21","FFFD24" bsocket.WriteHex "FFFC" & Mid(c,5) Case "FFFB05" bsocket.WriteHex "FFFE" & Mid(c,5) Case "FFFD1F" ' IAC SB Window bsocket.WriteHex "FFFA1F00500018FFF0" ' window size 80x24 'bsocket.WriteHex "FFFA1F00840020FFF0" ' window size 132x32 Case "FFFA18" ' IAC SB Terminal-Type bsocket.WriteHex "FFFA18007674313030FFF0" ' IAC SB Terminal-Type vt100 Case "" ' コマンド終了 Exit Do End Select Loop End Sub ' ネゴシエートコマンドを1個ずつ読む Function ReadCommand ReadCommand = "" While Len(cmd) < 6 ' cmd はグローバル変数 rc = bsocket.Read(b,2) ' 16進モード if rc <> 0 Then bsocket.Debug "Read Error " & rc WScript.Quit End If cmd = cmd & b Wend c = Mid(cmd,1,4) If c = "FFFB" or c = "FFFD" or c = "FFFE" Then ' FFxxxx ReadCommand = Mid(cmd,1,6) cmd = Mid(cmd,7) Exit Function End If If c = "FFFA" Then ' SB 可変長。SE(FFF0) までがコマンド While InStr(cmd,"FFF0") <= 0 rc = bsocket.Read(b,2) ' 16進モード if rc <> 0 Then bsocket.Debug "Read Error " & rc WScript.Quit End If cmd = cmd & b Wend i = InStr(cmd,"FFF0") ReadCommand = Mid(cmd,1,i+3) cmd = Mid(cmd,i+4) end if End Function ' 指定された文字列を16進モードで受信したら送信 Sub HexReadWrie(indata,outdata) While InStr(cmd,indata) <= 0 ' cmd はグローバル変数 rc = bsocket.Read(b,2) ' 16進モード if rc <> 0 Then bsocket.Debug "Read Error " & rc WScript.Quit End If cmd = cmd & b Wend bsocket.Write outdata cmd = "" End Sub ' 指定された文字列を受信したら送信 Sub ReadWrite(indata,outdata) While InStr(cmd,indata) <= 0 rc = bsocket.Read(b) if rc <> 0 Then bsocket.Debug "Read Error " & rc WScript.Quit End If cmd = cmd & b Wend bsocket.Write outdata cmd = "" End Sub ' 指定された文字列を受信するまでwait Sub Wait(indata) bsocket.Debug "Wait " & indata While InStr(cmd,indata) <= 0 rc = bsocket.Read(b) if rc <> 0 Then bsocket.Debug "Read Error " & rc WScript.Quit End If cmd = cmd & b Wend cmd = "" End Sub ' 指定された文字列を受信するまでwait Sub HexWait(indata) While InStr(cmd,indata) <= 0 rc = bsocket.Read(b,2) ' 16進モードで受信 if rc <> 0 Then bsocket.Debug "Read Error " & rc WScript.Quit End If cmd = cmd & b Wend cmd = "" End Sub ' shellコマンド実行 Function Shell(outdata) bsocket.Debug "Shell " & outdata bsocket.Write outdata & vbCr ' data = "" While Right(data,2) <> "$ " ' rc = bsocket.Read(b) if rc <> 0 Then bsocket.Debug "Read Error " & rc WScript.Quit End If data = data & b Wend Shell = Mid(data,1,Len(data)-2) ' 最後の "$ " を除く End Function
''==== httpsget.vbs proxy = bsocket.GetProxy("https") host = "www.hogehoge.com" server = host port = 443 path = "/data/images/good.jpg" if proxy <> "" then ' プロクシあり? a = Split(proxy,":") server = a(0) ' プロクシサーバ名 port = a(1) ' プロクシポート番号 rc1 = bsocket.SSLConnect(server,port, 10) if rc1 <> 0 then bsocket.debug "connect error " & rc1 WScript.quit end if ' CONNECTコマンド送信 cmd = "CONNECT " & host & ":443 HTTP/1.0" & vbCrLf rc1 = bsocket.write (cmd & vbCrLf) if rc1 <> 0 then bsocket.debug "write error " & rc1 WScript.quit end if bsocket.debug "CONNECT command done." bsocket.readline datas bsocket.debug datas While rc1 = 0 And Len(datas) > 0 ' ヘッダーを読み飛ばす rc1 = bsocket.readline(datas) bsocket.debug datas Wend else ' プロクシなし rc1 = bsocket.SSLConnect(server,port, 10) if rc1 <> 0 then bsocket.debug "connect error " & rc1 WScript.quit end if end if ' SSL ハンドシェーク rc1 = bsocket.SSLHandSHake() if rc1 <> 0 then bsocket.debug "SSL HandShake Error " & rc1 WScript.quit end if bsocket.debug "HandShake done." cmd = "GET " & path & " HTTP/1.0" host = "Host: " & host & vbCrLf rc1 = bsocket.write (cmd & vbCrLf & host & vbCrLf) if rc1 <> 0 then bsocket.debug "write error " & rc1 WScript.quit end if bsocket.readline datas bsocket.debug datas While rc1 = 0 And Len(datas) > 0 ' ヘッダーを読み飛ばす rc1 = bsocket.readline(datas) bsocket.debug datas Wend rc1 = bsocket.read(datax, 1) ' イメージをバイナリ読込み mode = 0: lenx = 0 While rc1 = 0 And IsArray(datax) 'ファイルに書込みます lenx = lenx + UBound(datax) + 1 rc1 = bsocket.BinaryWrite(datax, "c:\temp\good.jpg", mode) mode = mode + 1 rc1 = bsocket.read(datax, 1) Wend bsocket.debug "Done. " & lenx
// download.cs // csc /R:BSOCKETLib.dll download.cs // 使用方法: download.exe url,filepath using System; class MainClass { public static void Main(string[] args) { // url,path if (args.Length != 2) { DisplayUsage(); return; } if (args[0] == "/?") { DisplayUsage(); return; } string url = args[0]; string filename = args[1]; int https = 0; int wlen = 0; Console.WriteLine(url); Console.WriteLine(filename); if (url.Substring(0,7) != "http://" && url.Substring(0,8) != "https://") { DisplayUsage(); return; } if (url.Substring(0,8) == "https://") { https = 1; } string server = url.Substring(7+https); int i = server.IndexOf("/",0); string path = ""; if (i != -1) { path = server.Substring(i+1); server = server.Substring(0,i); } try { BSOCKETLib.Imain bsocket = new BSOCKETLib.main(); string proxy; int port; if (https == 1) { port = 443; proxy = bsocket.GetProxy("https"); } else { port = 80; proxy = bsocket.GetProxy("http"); } string host = server; int rc; string crlf = "\r\n"; int timeout = 10; object datas; string cmd,line; Console.WriteLine(server); Console.WriteLine(path); if (proxy != "") { // プロクシあり? int pos = proxy.IndexOf(":"); server = proxy.Substring(0,pos); // プロクシサーバ名 port = int.Parse(proxy.Substring(pos+1)); // プロクシポート番号 if (https == 1) { rc = bsocket.SSLConnect(server,port, timeout); if (rc != 0) { Console.WriteLine("SSLConnect error " + server + " " + rc.ToString()); return; } // CONNECTコマンド送信 cmd = "CONNECT " + host + ":443 HTTP/1.0" + crlf; rc = bsocket.Write(cmd + crlf); if (rc != 0) { Console.WriteLine("Write error " + rc.ToString()); return; } datas = bsocket.ReadLine2(); line = datas as string; // キャスト while (bsocket.Result == 0 && line.Length > 0) { //ヘッダーを読み飛ばす datas = bsocket.ReadLine2(); line = datas as string; // キャスト } } else { // http rc = bsocket.Connect(server,port,timeout); if (rc != 0) { Console.WriteLine("Connect error " + server + " " + rc.ToString()); return; } } } else { // プロクシなし int pos = server.IndexOf(":"); port = int.Parse(server.Substring(pos+1)); // ポート番号 server = server.Substring(0,pos); // サーバ名 if (https == 1) { rc = bsocket.SSLConnect(server,port,timeout); if (rc != 0) { Console.WriteLine("SSLConnect error " + server + " " + rc.ToString()); return; } } else { rc = bsocket.Connect(server,port,timeout); if (rc != 0) { Console.WriteLine("Connect error " + server + " "+ rc.ToString()); return; } } } if (https == 1) { // SSL ハンドシェーク rc = bsocket.SSLHandshake(""); if (rc != 0) { Console.WriteLine("SSLHandShake error " + rc.ToString()); return; } Console.WriteLine("HandShake done."); } cmd = "GET /" + path + " HTTP/1.0"; host = "Host: " + host + crlf; rc = bsocket.Write(cmd + crlf + host + crlf); if (rc != 0) { Console.WriteLine("Write error " + rc.ToString()); return; } datas = bsocket.ReadLine2(); line = datas as string; Console.WriteLine(datas); while (bsocket.Result == 0 && line.Length > 0) { //ヘッダーを読み飛ばす datas = bsocket.ReadLine2(); Console.WriteLine(datas); line = datas as string; } object datax; datax = bsocket.Read2(1); // ボディをバイナリ読込み int mode = 0; while (bsocket.Result == 0 && datax is Array) { // Arrayデータ ? rc = bsocket.BinaryWrite(datax,filename, mode); //ファイルに書込み mode = mode + 1; wlen += ((Array)datax).Length; // 書込みバイト数 Arrayにキャスト datax = bsocket.Read2(1); } } catch(Exception ex) { Console.WriteLine("Unexpected COM exception: " + ex.Message); } // finish Console.WriteLine("Done. Length=" + wlen.ToString()); } private static void DisplayUsage() { Console.WriteLine("Download."); Console.WriteLine("Usage: download.exe url,filename"); Console.WriteLine("where url is http:// or https://"); Console.WriteLine("where filename is full path"); } }