HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1012
アース複数人で可能なチャットを作りたいのですが4未解決


アース

リンク

2006/10/12(Thu) 17:07:39|NO.2952

初めまして。
自分は今複数人で使用できるチャットを製作中なのですが、
ソケット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



この記事に返信する


七次元

リンク

2006/10/12(Thu) 17:34:33|NO.2953

奇遇ですな。自分も今作ってますw
3人以上で通信ならUDP接続をオススメします。1人がipを晒すだけで簡単に接続できます。

スクリプトを見ましたが、クライアントがホストを立てるのはおかしいかと・・・
TCP通信はホストのみがmakeしてクライアントはmakeを使わなかった気がします。
それと同じPCでテストしているならipはローカルIPを使用。同じポートは開けない。(エラーが出ます)
などなど通信は難しいです。
それとホスト側はポートを開放する必要があります。

よく見るとポート番号が300番代ですが、ネットで調べましたか?
小さい数はすでに予約されているポートですので5000以降を使うべきです。

まずは1対1で通信するソフトを自分のPCで試してみて、通信可能なら複数にする。っという感じで
だんだん広くしていく方が成功しやすいです。



klz

リンク

2006/10/13(Fri) 10:46:01|NO.2955

http://www.pcbsoft.net/
こちらでpcbnet2というプラグインが配布されています。
HSP2用ですがサンプルスクリプトのチャットはいい感じですよ。
宜しければ参考にしてみてください。



七次元

リンク

2006/10/13(Fri) 12:00:29|NO.2956

>klzさん
自分はそれを使ってます。
ポートの概念がわからなければ0に設定すると自動であいてるポートを選んでくれますよ



SINJI

リンク

2006/11/6(Mon) 12:04:11|NO.3261

アースさん。このスクリプトはダミーデータっぽいですよ・・・。
80行目と81行目が違うような。。。
(僕の使用しているのは、HSP3.1βです)
参加すると、エラーになるです。(windowserror)



ONION software Copyright 1997-2023(c) All rights reserved.