
| ファイル名 | 説明 |
| 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");
}
}