#include "pcbnet2.as"
IP = "127.0.0.1"
port = 6546
max = 10
sendmessage = ""
dim sock,max
dim objid,10
notesel buf
objsize 320,20
button "サーバー",*MAKE:objid(0) = stat
pos 320,0
button "クライアント",*OPEN:objid(1) = stat
pos 0,20
mesbox buf,640,440,0,0:objid(2) = stat
input sendmessage,440,20,100:objid(3) = stat
pos 440,460
objsize 200,20
button gosub "送信",*SENDDATA:objid(4) = stat
objenable objid(4),0
stop
*MAKE
SERVERflg = 1//サーバーとクライアントを区別するため
tcpmake mysock,port
if stat != 0:end
goto *START
*OPEN
tcpopen sock,IP,port//接続
repeat
tcpiscon sock
if stat = 1:break
if stat = 2:end
loop
goto *START
*START//オブジェクトを有効、無効化する
objenable objid(0),0
objenable objid(1),0
objenable objid(4),1
*MAIN
if SERVERflg = 1:gosub *CONNECT_WAIT
gosub *RECVDATA
await 1
goto *MAIN
*CONNECT_WAIT//サーバーのみ接続待機
tcpwait mysock
if stat = 1{
repeat max
if sock(cnt) = 0{
tcpaccept sock(cnt),mysock
}
loop
}
return
*RECVDATA//受信
if SERVERflg = 0{//クライアント
tcpcount datasize,sock
if datasize != 0{
get = ""
tcpget get,datasize+1,sock
noteadd get,0,0
objprm objid(2),buf
}
}else{//サーバー
repeat max
if sock(cnt) != 0{
tcpcount datasize,sock(cnt)
if datasize != 0{
get = ""
tcpget get,datasize+1,sock(cnt)
send = "[ID:"+cnt+"]"+get+""
repeat max
if sock(cnt) != 0:tcpput send,sock(cnt)
loop
noteadd send,0,0
sendmessage = ""
objprm objid(2),buf
objprm objid(3),sendmessage
}
}
loop
}
return
*SENDDATA//送信
if sendmessage != ""{
if SERVERflg=0{//クライアント
send = ""+sendmessage+""
tcpput send,sock
}else{//サーバー
send = "[ID:MASTER]"+sendmessage+""
repeat max
if sock(cnt) != 0:tcpput send,sock(cnt)
loop
noteadd send,0,0
objprm objid(2),buf
}
sendmessage = ""
objprm objid(3),sendmessage
}
return
このようにサーバーとクライアントで、
そろぞれ処理を分けることで1つに統合することができます。
このスクリプトでは自分のサーバーにしか接続できませんが、
IPアドレスの部分を変更すれば他人のサーバーにも接続できます。