goo

ソケットを使用した通信メモ

◆一覧リスト
HSP Ver3.0
HSP Ver2.61
ブログ関連
その他
★人気blogランキング

「ソケットの使用」 クライアント ◆使い方
■簡単な流れ
1.ソケット通信するのに必要なファイルを読込みます
当たり前ですが、一応。 例) #include "hspsock.as"
2.DLLの初期化
※「HSPSOCK」では必要ありません。 「WSAStartup」関数を使用します。
3.ソケットを作成します
以下の場合ソケットを作成(3)し、 ポート「80」で「blog.goo.ne.jp」に接続(4)しています。 ソケットID「1234」を利用してデータの送受信が可能になります。 例) sockopen 1234 , "blog.goo.ne.jp" , 80
4.接続します
※「HSPSOCK」では必要ありません。 「gethostbyname」関数等で、ホスト情報を取得。 3で作成したソケットを使って接続します。 「connect」関数を使用します。
5.送信、受信を始めます
例) sdim data , 1024 sockput "send" , 1234 //送信 sockget data , 1024 , 1234 //受信
6.ソケットを切断します
3で作成したソケットを切断します 例) sockclose 1234
7.DLLの使用を終了します
※「HSPSOCK」では必要ありません。 「WSACleanup」関数を使用します。
■ポートについて ポートは、複数の相手と同時に接続を行なうために IPアドレスの下に設けられたサブアドレスです。 ポート番号は0~65535番まであり、 0~49151番までは特定の目的に予約されているため (例えば、httpは80番・ftpは20番と21番等) 自由に使ってよいのは残りの49152~65535番までです。
※C:WINDOWS¥system32¥drivers¥etc¥servicesの一部
# Copyright (c) 1993-1999 Microsoft Corp. # This file contains port numbers for well-known services defined by IANA # Format: # service name port number/protocol [aliases...] [#comment]
service nameportportocolcomment
ftp-data20tcp #FTP, data
ftp21tcp#FTP. control
telnet23tcp
smtp25mail#Simple Mail Transfer Protocol
http80tcp#World Wide Web
pop2109tcp#Post Office Protocol-Version2
pop3110tcp#Post Office Protocol-Version3
ntp123udp#Network Time Protocol
■HTTPについてとほほのWWW入門さんのHP(アラカルトからHTTP入門)がとても参考になりました。 ①サーバーに「メソッド」を「リクエスト」することで、 ②「レスポンス」を受け取ります。 ①の例)GETがメソッドになります sdim send_data , 1024 send_data = {"GET / HTTP/1.1 Accept-Language: ja Host: www.yahoo.co.jp¥n¥n"} sockput send_data , 1234 ②の例) sdim recv_data , 1024 sockget data , 1024 , 1234 送受信するデータは複数行になります。 かならず空行を入れる必要があります。
送信するデータ
GET / http/1.1 リクエスト行 ヘッダ行(複数行可能) (空行) メッセージボディ(POSTメソッドなどで使用)
受信するデータ
HTTP/1.1 200 OK レスポンス行 ヘッダ行 (空行) html メッセージボディ
メソッド例
メソッド説明
GETページを取得
HEADヘッダを取得 ファイルサイズや更新日時を取得する場合に使います
POSTmethod="POST" を指定したフォームに入力したデータを サーバに転送します
PUTファイルをサーバに送ります
DELETE指定したりソースを削除します
CONNECTプロキシサーバを利用してSSL通信する場合に使用します
ステータスコード 以下実行結果にある「HTTP/1.1 200 OK」の200がステータスコードです。
ステータスコード説明
100~199各情報通知
200~299正常終了
300~399リクエスト対象がありません
400~399クライアントのリクエストエラー
500~599サーバーエラー
◆HSP Ver3 「hspsock.dll」を使用した場合
実行結果
サンプルソースコード
/////////////////////////////////////////////////
//定義
#define		SOCKET_ID  1000
#define		PORT       80

/////////////////////////////////////////////////
//インクルード
#include "hspsock.as"

/////////////////////////////////////////////////
//変数
	sdim	send_data , 1024
	sdim	recv_data , 1024
	sdim	inputdata , 1024
	sdim	string    , 1024

/////////////////////////////////////////////////
//ウィンドウ作成
	screen 0 , 500 , 200
	title "HPデータ読込"

	pos 0 , 0 : input inputdata , 450 , 20 , 1024

	objsize 50 , 20 : pos 450,0
	button "読込" , *load

	pos 0 , 20:
	mesbox recv_data , 500 , 180

stop

/////////////////////////////////////////////////
//サーバからデータ取得
*load
	tmp=instr(inputdata , 0 , "//")
	if tmp != -1{
		getstr inputdata ,inputdata,tmp+2,''
		objprm 0 , inputdata
	}

	tmp=instr(inputdata , 0 , "/")
	string = inputdata
	if tmp != -1 : string = strmid(inputdata , 0 , tmp)

	//ソケットの初期化と接続
	sockopen SOCKET_ID , string , PORT
	if stat != 0 : title "error : open" : stop

	string = ""
	if tmp==0 : tmp++ : getstr string , inputdata , tmp , ''

	//リクエスト
	send_data=""
	notesel send_data
	noteadd "GET /"+string+" /http/1.1" , -1
	noteadd "" , -1 : noteadd "" , -1
	sockput send_data , SOCKET_ID
	if stat != 0 : title "error : send" : stop

	//レスポンス
	sdim string , 10240
	repeat -1
		title "読み込み中・・・ "+cnt+"回"
		sockget string , 10240 , SOCKET_ID
		if (stat=0) & (string = "") : break
		recv_data+=string
		await 1
	loop

	objprm 2, recv_data

	//ソケットを切断
	sockclose SOCKET_ID

	title "読込終了"
stop
コメント ( 0 ) | Trackback ( 0 )
« ウィンドウを透過 メールの送信方法 »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。