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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0211
hitochan既にログインしている人の情報を得る5解決


hitochan

リンク

2007/2/11(Sun) 08:34:31|NO.5592

pcbnet2で下のプログラムのように
既にログインしている人の情報を得るために、
conper(ログインしている全ての人数が代入されている)を送り、
クライアントではその分だけ繰り返します。
cntを送りcntgに代入。そして、name.cntg(その人の名前)に代入して
mes命令で表示したのですが、
例えばAとBが既にログインしていたとすると、
A
B
と表示してほしいのですが、
A0001Bと表示されてしまいます。
これはなぜなんでしょうか。どこに問題があるのでしょうか。

サーバー側 tcpputc conper-1,gas.sc repeat conper-1 userc=strf("%04d",strlen(user.cnt))+user.cnt tcpputc cnt,gas.sc tcpput userc,gas.sc loop クライアント側 repeat tcpgetc conper,gas if stat=0:break await 1 loop mes conper repeat conper tcpgetc cntg,gas tcpget size,5,gas size=int(size) tcpget name.cntg,size+1,gas size="" mes name.cntg loop




この記事に返信する


YOYO

リンク

2007/2/12(Mon) 11:51:07|NO.5611

一部抜き出しではなく、実際に不具合の起こる、最小のスクリプトを掲示してみてください。
上のスクリプトでは、ぱっと見た感じでは問題なさそうです。



hitochan

リンク

2007/2/12(Mon) 17:30:58|NO.5620

クライアント側

#include "pcbnet2.as" user="":pw="":size="":exi=0:adr="127.0.0.1":port=5030:nm="":mc=9 arget="":conper=0:users="":pws="":sdim name,10:dim soc,10 ;userは自分の名前,pwはパスワード,conperは自分以外のログインしている人 ;nameは自分以外のログインしている人の名前 objmode 0 *login cls pos 230,230:input user,200,30 input pw,200,30 pos 150,235:mes "ユーザー名" pos 150,260:mes "パスワード" objsize 100,30:pos 250,300:button "ログイン",*tuusin stop *tuusin if user="" or pw="":dialog "両方記入して下さい。",0,"忠告":goto *login cls tcpopen gas,adr,port repeat tcpiscon gas if stat=2:goto *miss if stat=1:break await 1 loop users=strf("%04d",strlen(user))+user pws=strf("%04d",strlen(pw))+pw tcpput users,gas tcpput pws,gas size=int(size) repeat tcpgetc exi,gas if stat=0:break await 1 loop if exi=0:tcpclose gas:dialog "ユーザー名またはパスワードが間違っています。",0,"失敗" if stat=1:user="":pw="":goto *login dialog "ログインしました。",0,"ログイン確認" goto *alexi stop *miss dialog "サーバーが起動していないか、接続中にエラーが発生しました。",0,"警告" end *alexi repeat tcpgetc conper,gas if stat=0:break await 1 loop repeat conper tcpgetc cntg,gas tcpget size,5,gas size=int(size) tcpget name.cntg,size+1,gas size="" mes name.cntg loop



hitochan

リンク

2007/2/12(Mon) 17:37:36|NO.5621

クライアント側

#include "pcbnet2.as" dim soc,10:dim gas,10:sdim user,10:sdim pw,10:sdim noteexi,10 sdim noteexig,10:dim arget,10:users=str(users):size=str(size) tcpmake gbs,5030 repeat repeat 10 sc=cnt ;soc.cntの値 0の時はそのcntにはログインされていない。 ;1はログインしてある。2はログイン処理終了 ;-1はログイン失敗 ;conperはログインしている人数 if soc.cnt=0:gosub *wanda:if waits=0:continue if soc.cnt=1:gosub *login if soc.cnt=2:gosub *alexi if soc.sc!0 or soc.sc=-1:gosub *conon loop await 1 loop *wanda tcpwait gbs:waits=stat if waits=1:tcpaccept gas.sc,gbs:soc.sc=1 return *login repeat tcpget size,5,gas.sc if stat!0:break await 1 loop size=int(size) tcpget user.sc,size+1,gas.sc size=str(size) tcpget size,5,gas.sc size=int(size) tcpget pw.sc,size+1,gas.sc mes user.sc mes pw.sc size=str(size) exist ""+user.sc+""+".txt" if strsize!-1:exi=1 if strsize=-1:exi=0:soc.sc=-1 switch exi case 1 notesel noteexi.sc noteload ""+user.sc+""+".txt" noteget noteexig.sc,0 switch pw.sc case noteexig.sc soc.sc=2 conper+ swbreak default exi=0 soc.sc=-1 swbreak swend swbreak swend tcpputc exi,gas.sc soc.sc=2 return *conon tcpfail gas.sc switch stat case 1 soc.sc=0 user.sc="" pw.sc="" noteexi.sc="" conper- arget.sc=0 mes "gas."+sc tcpclose gas.sc gas.sc=0 swbreak swend return *alexi tcpputc conper-1,gas.sc repeat conper-1 userc=strf("%04d",strlen(user.cnt))+user.cnt tcpputc cnt,gas.sc tcpput userc,gas.sc loop soc.sc=3 return
*alexiでわかったことはクライアント側で2回目のループの場合cntの値が受信できていないということです。



YOYO

リンク

2007/2/13(Tue) 05:42:04|NO.5656

できるだけ不具合が出るなかで"最小"のスクリプトにしてください。
長いと読む気がしない・・・
とりあえず、不具合とエラーの原因となる部分を指摘しておきました。

クライアント

//省略 *alexi repeat tcpgetc conper,gas if stat=0:break await 1 loop repeat conper tcpgetc cntg,gas size="" /**********追加**********/ tcpget size,5,gas size=int(size) tcpget name.cntg,size+1,gas size="" mes name.cntg loop
サーバ

#include "pcbnet2.as" /********* sdimの使い方が間違ってる *****************/ dim soc,10:dim gas,10:sdim user,64,10:sdim pw,64,10:sdim noteexi,64,10 sdim noteexig,64,10:dim arget,10:users=str(users):size=str(size) tcpmake gbs,5030 //省略 *login repeat tcpget size,5,gas.sc if stat!0:break await 1 loop size=int(size) tcpget user.sc,size+1,gas.sc size=str(size) tcpget size,5,gas.sc size=int(size) tcpget pw.sc,size+1,gas.sc mes user.sc mes pw.sc size=str(size) exist ""+user.sc+""+".txt" if strsize!-1:exi=1 if strsize=-1:exi=0:soc.sc=-1 switch exi case 1 notesel noteexi.sc noteload ""+user.sc+""+".txt" noteget noteexig.sc,0 switch pw.sc case noteexig.sc soc.sc=2 conper+ swbreak default exi=0 soc.sc=-1 swbreak swend swbreak swend tcpputc exi,gas.sc //soc.sc=2 /************* エラーの原因 ***************/ return *conon tcpfail gas.sc switch stat case 1 soc.sc=0 user.sc="" pw.sc="" noteexi.sc="" //conper- /************* エラーの原因 ***************/ arget.sc=0 mes "gas."+sc tcpclose gas.sc gas.sc=0 swbreak swend return //省略



hitochan

リンク

2007/2/13(Tue) 19:02:38|NO.5667

>長いと読む気がしない・・・
そうでした・・・すいません。
気をつけますね。
できました!
ありがとうございます!
解決しました。



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