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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0410
peko接続できない7解決


peko

リンク

2011/4/10(Sun) 20:00:01|NO.38313

hspsockを使ってファイルのやり取りをするようなツールを作っているのですが、
特にエラーは起きないのですが、どうしても接続できません。
どこが悪いのかヒントだけでも教えていただけると助かります。お願いします。

//クライアント

ip="接続先のグローバルIP" port=11111 repeat sockopen 0,ip,port if stat=0:break wait 5 loop title"接続完了"
//サーバー

port=11111 sockmake 0,port if stat=0:title"接続待ち..." repeat sockwait 0 if stat=0:break wait 5 loop title"接続完了"



この記事に返信する


peko

リンク

2011/4/10(Sun) 20:45:20|NO.38314

書き忘れましたが、OSはWindow7Homepremiumで
グローバルIPはttp://dog.tele.jp/lookup.php で調べました。



HK2

リンク

2011/4/10(Sun) 21:48:50|NO.38323

IPアドレスを127.0.0.1ではうまくいきますか?
ipgetで取得したアドレスではうまくいきますか?
ファイアーウォールでブロックされていませんか?
ポート開放はされていますか?

ネットワークに疎いので、適切な回答ではないかもしれません。



backdrop

リンク

2011/4/28(Thu) 21:33:57|NO.38785

title命令でメッセージ出してるけど
まさかそれを見落としてる、なんてことはないよねw、、

なんて思ってたら、さっそくミス発見。
クライアント側のスクリプトsockopenの用法を間違ってます。
正しくは

#include "hspsock.as" ip="接続先IPアドレス" port=11111 sockopen 0,ip,port if stat : dialog "err" title"接続完了"



HK2

リンク

2011/4/29(Fri) 09:34:41|NO.38792

backdropさん


こちらではクライアントのソースの変数ipを127.0.0.1やipgetで取得したものにして、
ローカルで実行する分には接続できました。
おそらくソースに問題は無いと思います。

pekoさんのクライアントのソースは
接続に失敗したときに、成功するまで再試行する動作ですので、
ソースは「間違って」はないでしょう。
接続できないものに再試行はよくない動作だと思いますが。

わざとかもしれませんが、
backdropさんのソースでは接続に失敗しても、「接続完了」になります。


pekoさん


もしもbackdropさんの接続に失敗しても接続完了と表示される動作がわざとであれば、
サーバーの方を見直してください。
似た動作があります。
Hint1:サーバーを2重に起動させてください。
必要であればHint2もあります。

あと、今回はソースではなくネットワークの問題だと思います。



ORZ

リンク

2011/4/29(Fri) 10:16:44|NO.38793

時間の壁じゃねーかな。ループバックとかだと一瞬でデータがやり取りされるから問題
無いのかもしれない。このソースでは鯖と蔵が共に約50msec毎に接続しに行ったり
接続が来てるかチェックしてるわけだ。二つのPCの間を、仮に5msecでデータがやり取り出来て
鯖の処理にxmsecかかると仮定して、クライアントの接続要求が到達するのが5msec後
それが鯖で感知されるのが最大50msec後、処理にxmsec、そこから返信が到達するのが5msec後
という風に何事にも時間がかかると思う。
ただ厳密には、sockopen中は処理が止まるはずなのでクライアントのrepeatは
約50msec+sockopenの器の広さmsec毎に繰り返される。
それでその返信が来ないうちにクライアントがホイホイ次の接続要求を出すもんだから
延々と繋がらない。と勝手に妄想したのでクライアントの接続処理を繰り返さないなら
backdrop氏のコードのようにすればよく、どうしても繰り返したいならrepeatの
waitを200にするとかして接続要求の頻度を落とし、鯖に余裕を持たせたらよさげ。
急がば回れの精神が重要だ。

それからサーバーの方は最小限の機能を持った正しいコードだと俺は思うので手直しする
必要はないと思う。Hint1を見ても修正点がわからん。なのでHint2を待つことにしよう。



HK2

リンク

2011/4/29(Fri) 18:37:53|NO.38795

Hint2:サーバーのソースのrepeatの下にmes "ran"を追加してください。

ORZさんの指摘を受け、こちらが間違っていたことがわかりました。
こちらが思っていたことは、sockmakeが何らかの原因で失敗したときにも、
そのままクライアントからの受信を待つ動作がおかしいなということです。
>最小限の機能を持った
この文を読んで、通常は正しく動作するプログラムに対し、
エラー処理を求めていたことがおかしいことに気付きました。
この処理をしないからといって問題を起こすことはないので余計にですね。



peko

リンク

2011/5/12(Thu) 00:05:37|NO.39138

解決
ありがとうございました



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