昔、どこかのHPに掲載していた2.61用の簡易チャットをHSP3用に直したものです。
このスクリプトを参考に、機能を拡張していけばネットゲームを作れるはずです。
ただし、HSPの命令だけではなく、ネットワークに関する基礎的な知識、最低でもIPとportのことが分からないと、ネットワークプログラミングはできません。
#include "hspsock.as"
screen 0,640,480
onexit *owari
title "p2p簡易チャット"
port=12345 ;使用するポート番号
comment="" ;コメント入力変数
ipget
ip=refstr ;ip番号変数
dim sock_num,2
sock_num(0)=0
sock_num(1)=1
sdim message,1000 ;チャット文章変数
cls
pos 150,50:button goto " ホ ス ト ",*host
pos 150,150:button goto "クライアント",*client
pos 150,200
mes "IP番号"
input ip,150,25
mes "PORT番号"
input port,150,25
stop
;ホストを立てる
*host
cls
sockmake 0,port ;番号0のソケットを作る
if stat!0:goto *tusinerr ;stat変数が0でないと、エラー。0だとソケット制作完了
mes "接続を待ちます"
mynum=0
repeat
sockwait sock_num(mynum) ;ソケット番号0でクライアント接続を待機する
if stat>=2:goto *tusinerr ;stat変数が2以上だと、エラー
if stat=0:goto *main ;stat変数が0だとクライアント接続完了
;stat変数が1の場合、相手の接続がない。
wait 1
loop
*client
mynum=1
sockopen sock_num(mynum),ip,port ;番号0のソケットを作り、ip,port番号に対して接続を試みる
if stat!0:goto *tusinerr ;stat変数が0でないと、エラー。0だとホストに接続
goto *main
*main
cls ;オブジェクトを消す。
;ここから、チャット文章送信オブジェクトをはる。
pos 5,270:input comment,300,25 ;チャットメッセージ入力窓を作る
pos 310,270:button goto "送信",*sousin ;変数commentの内容を送信
pos 310,240:button goto "消す",*del
pos 0,0:mes message ;チャットメッセージを表示
*mescheck ;相手のメッセージの受信待ちの処理
sockcheck sock_num(mynum) ;ソケット番号に、受信できるデータが届いているかチェック
if stat>=2:goto *tusinerr ;stat変数が2以上だと、エラー
if stat=0:goto *jusin ;stat変数が0だとデータを受信
await 50 ;20フレームで受信を待ちます
goto *mescheck ;stat変数が1だと、ループして受信を待ちます。
*jusin ;相手データーの受信処理
temp="" ;受信データ受け取り用変数
sockget temp,64,sock_num(mynum) ;ソケット番号0からうけっ取ったデータを、64kバイトごと、変数tempに代入する。
if stat!0:goto *tusinerr ;stat変数が0でないと、エラー。0だと受け取っている。
if temp="":goto *tusinerr
message+=temp+"\n" ;受信データを改行を入れて、チャットメッセージに入れる
goto *main ;メインに戻ることによって、チャットメッセージを書き換え、表示する
*sousin
sockput comment,sock_num(mynum) ;指定されたソケットを使って、変数commentのデータを送信。
if stat!0:goto *tusinerr ;stat変数が0でないと、エラー。0だと送信成功。
message+=comment+"\n" ;送信したデータを改行を入れて、チャットメッセージに入れる
comment="" ;コメントしたデーターを消す。
goto *main ;メインに戻ることによって、チャットメッセージを書き換え、表示する
*del
comment="" ;入力欄のデーターを消す。
goto *main ;メインに戻る
*tusinerr
dialog "通信中にエラーが発生しました"
*owari
sockclose 0 ;接続されているソケットを切断
end