初めまして。
自分は今複数人で使用できるチャットを製作中なのですが、
ソケット2番〜で通信して、
ソケット0番はクライアントからホストにIPを送信しまして、
ソケット1番はホストからクライアントに、今空いているソケット番号(no)を送信専用としまして。
noの数だけzyusinラベルのsockget、sousinラベルのsockputを実行、と考えておりました。
なぜか大量の不具合が出てきてしまいまして…
間違っている場所がございましたら指摘や修正をお願い致します。
#include "hspsock.as"
screen 0,400,300
onexit *gend
port=300
comment=""
ip=""
no=1
sdim message,1000
cls 1
pos 150,50 : button "ホスト",*host
pos 150,150 : button "参加",*client
input ip,150,25
stop
;ホストの処理
*host
cls 1:hostms=1
sockmake 0,port ;ホストを立てる
sockmake 2,port+2 ;ホストを立てる
sockmake 3,port+3 ;ホストを立てる
if stat!0 : goto *tusinerr
title "Host"
mes "通信待機中...."
repeat -1
wait 1
sockwait 0 ;接続を待つ
if stat>=2 : goto *tusinerr
if stat=0 :break
loop
goto *hostzyusin
*hostzyusin ;受信の処理
temp=""
sockget temp,64,0 ;データ受信
if stat!0 : goto *tusinerr
sockopen 1,temp,port+1 ;ソケットを初期化し繋げる
no=no+1:title str(no):sockput str(no),1
sockclose 1
goto *main
*hostzyusin2 ;受信の処理
temp=""
sockget temp,64,0 ;データ受信
if stat!0 : goto *tusinerr
sockopen 1,temp,port+1 ;ソケットを初期化し繋げる
no=no+1:title str(no):sockput str(no),1
sockclose 1
goto *mescheck2
;クライアントの処理
*client
title "Client":hostms=0
sockopen 0,ip,port ;ソケットを初期化し繋げる
sockmake 1,port+1 ;ホストを立てる
if stat!0 : goto *tusinerr
ipget:sockput refstr,0 ;メッセージの送信
if stat!0 : goto *tusinerr
repeat -1
wait 1
sockwait 1 ;接続を待つ
if stat=0 :break
loop
goto *crtzyusin
*crtzyusin
temp=""
sockget temp,64,1 ;データ受信
if stat!0 : goto *tusinerr
if int(temp)>1:no=int(temp):title str(no):sockopen no,ip,port+no
goto *dddddddd
;メイン画面
*dddddddd
cls
pos 5,270 : input comment,300,25
pos 310,270 : button "送信",*sousin
pos 310,240 : button "消す",*del
*main
color 255,255,255:boxf:color 0,0,0
pos 0,0 : mes message
*mescheck ;受信待ち
wait 1
if hostms=1:sockwait 0
if stat!0 and hostms=1:goto *mescheck2
if stat=0 and hostms=1:goto *hostzyusin2
*mescheck2
sockcheck no
if stat=0 : goto *zyusin
goto *mescheck
*zyusin ;受信の処理
temp=""
sockget temp,64,no
if stat!0 : goto *tusinerr
message+=temp+"\n"
goto *main
;送信するときの処理
*sousin
sockput comment,no ;メッセージの送信
if stat!0 : goto *tusinerr
message+=comment+"\n"
comment=""
goto *main
*del
message=""
goto *main
*tusinerr
dialog "通信中にエラーが発生しました!"
*gend
repeat 32
sockclose cnt
loop
end