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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0405
としあきHSPで多人数ゲームサーバを作る方法8解決


としあき

リンク

2007/4/5(Thu) 21:54:16|NO.7018

どうしても分から無かったので、質問させてください。
HSPで多人数のゲームサーバを製作するとき、hspsockですと、ソケットが32個しか作れないので、最大32人しか接続できません。
もしこれ以上の人数と接続するには、どうしたらよいでしょうか?
pcbnetを使うとソケット数は増えるのでしょうか。
また、普通のwebサーバのように、通常はソケットの接続待ちの状態で、クライアントのリクエストがあるたびに接続し、送信が終わるとソケットを切断、即ソケット待ちの状態にするのでしょうか?



この記事に返信する


93

リンク

2007/4/5(Thu) 22:53:24|NO.7021

>> hspsockですと、ソケットが32個しか作れないので、最大32人しか接続できません。

 その通りでサーバーソケットも1クライアントも1ソケットずつ生成する必要があります。


>> pcbnetを使うとソケット数は増えるのでしょうか。

 PCBnet2ではサーバーソケット1つでnクライアントを管理します。
 ただし、クライアント毎にソケットIDが生成されているので上とやっていることは変わりません。
 (hspsockのサーバー生成を自動管理したみたいなもの)


>>また、普通のwebサーバのように、通常はソケットの接続待ちの状態で、クライアントのリクエストがあるたびに接続し、送信が終わるとソケットを切断、即ソケット待ちの状態にするのでしょうか?

 多分そうなります。(どのレベル層の話かわからないので;
 



93

リンク

2007/4/5(Thu) 23:02:49|NO.7023

>>また、普通のwebサーバのように、通常はソケットの接続待ちの状態で、クライアントのリクエストがあるたびに接続し、送信が終わるとソケットを切断、即ソケット待ちの状態にするのでしょうか?

 あ、嘘ついた・・接続は維持します。
 切断要求かエラー送られるまでです。



としあき

リンク

2007/4/5(Thu) 23:50:43|NO.7024

93さん、返答していただきありがとうございます。

ただ、本当のことを言ってよく分かりません。自分の質問の仕方も悪いですし、勉強不足もあります。
申し訳ないです。

まず、「PCBnet2ではサーバーソケット1つでnクライアントを管理」が分かりません。PCBnet2だと、ポートを一つ空けたソケットを用意すると複数のクライアントを接続できるということですか?
それに、「nクライアント」となっているので、接続できるクライアント数は決まっていなく、好きなだけ接続できるということですか?



としあき

リンク

2007/4/6(Fri) 00:13:15|NO.7025

あと、もう一つ。
このPCBnet2で作られるソケットって、TCPでのソケットですか。UDPでのソケットですか。また両方ですか?
いろいろ聞いてすみません。



93

リンク

2007/4/6(Fri) 00:43:21|NO.7027

>> PCBnet2だと、ポートを一つ空けたソケットを用意すると複数のクライアントを接続できるということですか?
>> 好きなだけ接続できるということですか?

 その通りです。
 接続数はほぼ無制限です(ただ200~256個接続を試したらwinsock側でエラー発生)


>> このPCBnet2で作られるソケットって、TCPでのソケットですか。UDPでのソケットですか。また両方ですか?

 tcpmake,tcpopen なら TCP/IP
 udpsock なら UDPです。

 UDP は TCPのように「サーバーソケット1つでnクライアントを管理」がありません。
 なので、hspsockのように1client=1socketの実装になります。



としあき

リンク

2007/4/6(Fri) 22:09:33|NO.7072

93さん、ありがとうございます。
なんとなく分かりかけてきました。

これは、hspsockでは端折っていた、従来のソケット通信の接続方法のことなんですね。

たとえば、ここの書かれていることですね。
ttp://www.multisoft-lab.com/voicechat/socket.html

ただ、分からないのは、topmakeでLISTENソケットを作ったとき、ソケット番号が指定され、その上、tcpacceptで新しくソケットが作られているときにもソケット番号が指定されますが、同じソケット番号だと、不都合が起きないのでしょうか?
また、tcpcloseでソケットを閉じるとき、IDで閉じるソケットを指定しますが、tcpacceptで作った子プロセスが閉じるだけでなく、LISTENソケットの親プロセスも閉じることもありますか。親プロセスと、子プロセスを、指定して閉じることが出来るのでしょうか?

訳の分からない質問ですみません。
ソケット通信の理屈について分かる、何か良いテキスト(本とかwebとか)あったら、教えてください。

本当にすみません



93

リンク

2007/4/7(Sat) 04:32:01|NO.7092

>> topmakeでLISTENソケットを作ったときソケット番号が指定され
>> tcpacceptで新しくソケットが作られているときにもソケット番号が指定されますが、同じソケット番号だと、不都合が起きないのでしょうか?


  +ポート番号
   +LISTENソケット
+CHILEDソケット(0)
+CHILEDソケット(1)
      ・
      ・
+CHILEDソケット(n)

  のようになっているのでLISTENソケットIDが重なることはありません。


>> また、tcpcloseでソケットを閉じるとき、IDで閉じるソケットを指定しますが
>> 親プロセスと、子プロセスを、指定して閉じることが出来るのでしょうか?

  子ソケットはtcpshutで切断準備してから、tcpcloseで切れます。
  親ソケットはtcpcloseで消去できます。



としあき

リンク

2007/4/7(Sat) 19:58:26|NO.7134

93さん、ありがとうございます。
おかげで、hspsocktとの違いも、分かりかけています。

あとはサンプルスクリプトを読みながら、理解していきます。

どうもありがとうございます。



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