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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0724
通信がうまくいかない5解決


リンク

2010/7/24(Sat) 16:01:52|NO.33875

簡単なチャットプログラムねんですが
ニックネームを受け取るときになぜかまったく受け取ってくれず
ループするんですが、なぜでしょうかもうお手上げです

サーバー

*通信受付 //ポートへの接続を待つ tcpwait port //接続あり if stat=1 { namber++ //接続許可 tcpaccept socket(namber),port tcpaccept socket2(namber),port //接続フラグ setuzoku(namber)=1 //ニックネームの受信へ gosub*名前取得 } return *名前取得 //名前を取得する repeat tcpget name(namber),20,socket2(namber) //みんなに知らせる if name(namber)!=""{ sousinn=name(namber)+"さんが接続しました" noteadd sousinn,0,0 objprm 0,mess //みんなに送信 repeat 200 if setuzoku(all)=1{ tcpput sousinn,socket2(all) } all++ loop all=0 break } await 10 loop sousinn="" return

クライアント

    //接続を試みる repeat 100 tcpopen socket,ip,50000 tcpiscon socket if stat=1{ await 1000 tcpput name,socket break stop } await 100 loop

いちおう問題部と思われるところを書き出してみましたが足りなければいってもらえるとうれしいです



この記事に返信する


KA

リンク

2010/7/24(Sat) 16:54:18|NO.33876

何処でループするのかぐらい書いてください。
他の通信は正常なのでしょうか?

ループが止まらないのなら回数を指定するなりして、その中をmes等で表示すればある程度
は推測できます。

不具合に直接関係なさそうな部分(この場合「みんなに送信」部分等)を順次削っていき、
問題部分を特定していく方法も有ります。不具合が発生する、最低限のスクリプトを作る
のと同じことです。

「分からない無いからそれらしい部分を丸投げ」ではなく、あなた自身で問題部分を探す努
力をしましょう。



リンク

2010/7/24(Sat) 18:50:32|NO.33883

ご指摘ありがとうございます
まずどこでループするかについてなんですが
いろいろなところに カウントしてmes表示 で調べたところ
名前を取得するところで永遠にループしているんです
で、タイミング的にクライアントの送信を何回かに分けてやってみたんですが無理でした
というかサーバーが受け取らない状況でした。
で、ソケット通信がうまくいってないのかと調べましたがほかの通信はうまく・・・・
あ〜
例のループに回数制限入れたらうまくいきました
KAさんのアドバイスで解決することが出来ましたありがとうございます
デモなんでループに回数を設けるだけでうまくいくんだろう
問題は結局そこのループが無限ループかどうかだったみたいです



ORZ

リンク

2010/7/24(Sat) 21:03:49|NO.33895

repeat文の中もインデントしたほうが見やすい。
見難いからほとんど見てないけどとりあえず



//接続を試みる repeat 100 tcpopen socket,ip,50000 tcpiscon socket ;--------------------------


//接続を試みる tcpopen socket,ip,50000 repeat 100 tcpiscon socket ;--------------------------

だったとおもう



リンク

2010/7/24(Sat) 21:07:18|NO.33896

あ〜そうですね
ご指摘ありがとうございました早速変更させていただきました



リンク

2010/7/24(Sat) 21:07:34|NO.33897

解決



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