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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1203
うひょhspsockについて17解決


うひょ

リンク

2006/12/3(Sun) 15:23:10|NO.3931

今ゲームを作っていて、離れた場所にあるパソコン同士でも通信できるものを作りたいと
思いました。そこで、hspsockを使ったチャットのサンプルを見つけたので、
これを使えばできるのではないかと思い、
サンプルスクリプトを見てみたのですが、
CLIENT2.hspはsocket errorというダイアログが出て、
DAYTIME.hspは実行してwww.yahoo.co.jpのままCONNECTボタンを押すと
そのまま固まってしまいました。
getip.hspとHTTP.hspは正常に動作しましたが、
SERVER2.hspは「ポート999で接続を待っています…」のまま
変数aが延々増えて行きました。

それで、何というかhspsockの基本的な使い方が分からなくなってきました。
そこで、hspsockの基本的なサンプルを頂けないでしょうか?
よろしくお願いします。



この記事に返信する


hitochan

リンク

2006/12/3(Sun) 15:36:59|NO.3933

こんにちは
>CLIENT2.hspはsocket errorというダイアログが出て、
なぜなら、そのプログラムはクライアント側だからです。
サーバー(SERVER2.hsp)を起動した状態でクライアント側を起動すると
うまく通信できます。
僕も最近HSPsockを勉強しはじめたので、詳しくはわかりません・・・。



うひょ

リンク

2006/12/3(Sun) 17:19:02|NO.3942

なるほど。そうだったんですか。
ということは、接続するクライアント側は
サーバー側のIPアドレスとポート番号がわかっていなければならないということですよね?
最初メンバーを集めるときに、
ポケモンみたいなことをしたいと思ってるのですが、
できるでしょうか?
具体的には、まずサーバー側になる人が「グループを作る」ボタンを押すと、
グループが作成され他のクライアント側(何人もいる)が作成されたグループに
「参加する」ボタンを押すとサーバー側に「参加します」みたいなメッセージを送って
サーバー側が処理する…、みたいなことをしたいです。
しかし、一回データを受信するとデータは消えてしまい、3人以上でデータをやり取り
するのはとても面倒だと聞いたのですが…。



hitochan

リンク

2006/12/3(Sun) 17:41:36|NO.3944

>サーバー側のIPアドレスとポート番号が
>わかっていなければならないということですよね?
そうですね。ポート番号は自分で好きな数にしてます。
確かですが、HSPsockでは一対一の通信しかできないとか・・・。
できるのかもしれませんが。
なのでわたしはpcbnetと言うものを使っています。
http://milini.hp.infoseek.co.jp/hsp/hspchat.htm
このサイトにはチャットのサンプルスクリプトが載っている
ので参考にしてみて下さい。



七次元

リンク

2006/12/3(Sun) 18:08:11|NO.3946

ちょっと内容に関係ないですがポート番号は1024以降にした方がいいですよ。
1024までは予約されてるらしいので誤作動を起こさないとも限りませんので。
ホストはルーター経由ならポートの解放をしたりとめんどくさいのでネット権限が親にある場合はどうしようもないですね・・・



うひょ

リンク

2006/12/3(Sun) 18:38:28|NO.3947

>hitochanさん
そのサンプルが僕の書いた
>そこで、hspsockを使ったチャットのサンプルを見つけたので、
のチャットです。
pcbnetは検索かけてもいいサイトが無かったので、サンプルみたいなのが載っている
サイトは無いでしょうか?

>七次元さん
サンプルスクリプトのポート番号は999でしたよね。
あとはどうなんでしょうか(笑)



93

リンク

2006/12/3(Sun) 18:44:42|NO.3948

>>サンプルスクリプトのポート番号は999でしたよね。
ローカルIP前提のポートだと思います。
間違っても外向け使用しないほうが良いかと思います。

pcbnet2ならば1ポートで多数コネクション張れます。



七次元

リンク

2006/12/3(Sun) 19:36:38|NO.3949

自分はpcbnet2のリファレンスだけで作れました。
説明をじっくり読んだり適当なテストスクリプトを作ってるうちにわかってきますよ^^
多人数通信をするならTCPよりUDPが向いてます。
ゲームならなおさらUDPの方がいいかも(どこかにUDPはTCPより厳密な認証を行わないので通信が早いとか書いてた気が)
あとUDPならではのUPnPを使えばポート開放不要(環境によるけど)



hitochan

リンク

2006/12/3(Sun) 21:39:56|NO.3950

>そのサンプルが僕の書いた
そうなんですか!!
すいませんでした。
>pcbnetは検索かけてもいいサイトが無かったので、サンプルみたいなのが載っている
>サイトは無いでしょうか?
僕が知る限りではないですね。
Read meなどを見て覚えるしかないですかね。



hitochan

リンク

2006/12/3(Sun) 21:52:02|NO.3951

サンプルを見る限りでは、
案外TCPよりUDPの方がプログラム
くみやすい気がします。



93

リンク

2006/12/3(Sun) 21:59:34|NO.3952

UDPはコネクションレスなのでパケットロスという難癖があります。
ロスする理由はタイミング、相性、時間など不特定多数なので難しいです。
が、逆に全く起きない環境もあります。

なので自分で再送&再計算などのロジックを実装する必要があります。
初心者のかたはTCP/IPをおすすめします。



うひょ

リンク

2006/12/4(Mon) 15:59:29|NO.3955

そういえば、pcbnetってどこにあるんでしょうか?
それさえも見つかりませんでした…



七次元

リンク

2006/12/4(Mon) 16:14:49|NO.3957

pcbnetで検索したら一番上に出てきたんですが・・・
一応、作者の興味がHSPからそれたらしく、跡地となってますがpcbnet、pcbnet2、hspsockAはDL可能です



うひょ

リンク

2006/12/4(Mon) 20:53:57|NO.3961

あ、出ました。すみません。
pcbnetとpcbnet2、どっちがいいですかねぇ?



kanzaki

リンク

2006/12/5(Tue) 13:14:18|NO.3969

うひょ様、どちらでも良いような気がします(機能的には)が
新しいもの(2の方)を使用した方が無難な気がします。
もしくは
実際に両方使ってみる(テストスクリプトなんかを組んでみて)のはいかがでしょうか?

hitochan様、通信するだけであればそのとおりなのですが
93様がおっしゃるようにUDPはデーターの整合性を取る必要があります。
必要な制御としては、
 ・データーが正しいか判定する(チェックサムのようなもの)
 ・データー到着を確認する(SYN/ACKフラグのようなもの)
 ・再送を行う機構と、余計なパケットを排除する機構(トランザクションIDみたいなもの)
…とても面倒です。が、勉強の意味で作成するのも良いかもしれません。

少々話題がそれますが
七次元様
UPnP NAT TraversalがUDPポートしかマッピングできないとの事でしょうか?
それは初耳です。情報の出所がわかれば是非ご教示ください。
(もしくはNATに対してUPnPパケットを投げられるという意味でしょうか?
 それとも、UDP hole punchingの類の事でしょうか?)
あと、UPnPコントローラを作成するためには、
UPnPプロトコルスタックをある程度理解する必要が無いのでしょうか?
それよりも、ポート転送を書きにいく方が入門としては正しい気がしますが
七次元様は実装されてらっしゃるということでしょうか?
もしそうでしたら、UPnPのプロトコルに関して解説いただければ、幸いです。
わたしも、UPnPはまだ勉強中なもので…

ところで、ウェルノンポート(1023までのポート番号)も
別に自分が使っていなければ使っても支障は出ませんが
FTPなどのポートは、ルーターがFTPのポートモードの制御を行う可能性があります。
使っている環境によっても変わってきますが、注意が必要なので使用しない方が無難ですね…
また、ウェルノンポート以外でも、他の通信に使用されているものもあります。
それらのポートを使用するアプリケーションを使っている場合には注意が必要でしょう。
詳しくは
http://www.vwnet.jp/mura/tcpip-port.htm
が参考になると思います。



kanzaki

リンク

2006/12/6(Wed) 20:57:06|NO.4002

>>七次元様は実装されてらっしゃるということでしょうか?

申し訳御座いません。
pcbnet2に於いてUPnP NAT Traversal関連の命令が存在しておりました。
完全に確認不足でしたね。

他にも中々興味を引く命令が実装されておりますので

うひょ様、ぜひ、2の方を推薦します。



七次元

リンク

2006/12/6(Wed) 21:18:24|NO.4004

どうやらTCPでもUPnPは使えるようです・・・
自分の環境では使えなかったのでUDPだけだと思ってました。間違った情報を書き込んですみませんでした

UPnPはポートを触らなくてもホストになったりできる便利なものですが、ルーターによっては危険なために最初は使用しない設定になっているものがあるので、ルーターを設定する必要があるので微妙な機能ですね・・・



うひょ

リンク

2006/12/6(Wed) 22:25:30|NO.4005

皆様、ありがとうございます。とりあえず2をダウンロードしました。
TCPとかUPnPとか良く分かりませんが(ぉ
いろいろ調べたりしてがんばってみます。
ありがとうございます。



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