したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

VB2005のSocket通信の複数クライアントの非同期処理

1たけ:2011/02/04(金) 19:41:27
VB2005のSocket通信サーバーの複数クライアントの非同期処理
を参考にマルチスレッドの通信サーバを作成させて頂きました。
順調に動作はしているのでうが、同時接続は何台まで可能かと
質問を受けました。
色々とネット等々で調べたのですが、よくわかりません。
何か御存じでしょうか?
ちなみに通信サーバが稼働しているOSはWindows2003Serverに
なります。
1つの通信サーバで最大同時接続が何台まで可能なものでしょうか?

2igoten:2011/02/04(金) 20:06:41
サーバのポート番号の最大は65534ですが
Windowsの場合デフォルトで5000となっています。
レジストリ変更でで65534にまで拡張できるようです。

3ひろ4932:2011/02/09(水) 22:06:38
C#,VB2005のSocket通信サーバーの複数クライアントの非同期処理を参考にさせていただきました。
大変助かっており、有難うございます。
以前、OnWriteCompleteで文字列の書き込みが完了したときにメッセージを出力して
読み取りを続けるため、networkStream.BeginReadの呼び出しが話題になったことが
ありましたが、オリジナルのオライリー・ジャパンの「プログラミング C#」に
あったということで話が終わっていたのですが、今私の方でこちらのプログラムを
参考に作成したものが、時々、受信データがおかしくなることがあります。
データ長は529バイトなのですが、受信bufferの先頭に前のデータが残っている
ことがありました。パケットモニターでネット上のパケットを確認したのですが、
送信側は正常なデータを送信していました。
そこで、試しにOnWriteComplete後のBeginReadをはずしてみたのですが、
データ取得ミスは発生しなくなりました。(今のところ)
原因がわかないのであまり気持ちよくないのですが、
何か心当たりなどありましたらお教え願います。

4igoten:2011/02/09(水) 22:10:45
すみません金曜まで出張なのでお待ちください。

5igoten:2011/02/11(金) 10:19:27
bufferに前のデーターが残ってしまう件ですが、調べてみました。
結論から言いますと、私のサンプルプログラムのミスです。

NetworkStream.BeginRead メソッドの2番目の引数 int offsetは
bufferの何処からデーターを格納するかの値です。

つまりデーターが残ってしまうように見えるのはデーターの途中から
格納してしまっているからです。


OnReadCompleteで全てのデーターを読み込んで、bufferの読み込み位置を
0にクリアーする為に
networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null);
を入れています。

所が私のプログラムは、OnWriteCompleteの後に
networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null);
を入れてしまいました。
これは誤りです。
何故なら私のプログラムは送信はボタンで任意の時にデーターを送る
仕様になっています。
従って、データー受信中に送信のボタンを押すと、読み込みバッファが
クリアされて途中からデーターを格納しはじめてしまいます。

従って正しくはひろさんのおっしゃる通りOnWriteCompletメソッドの中の
networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null);
は不要と言うか入れてはいけませんでした。

サンプルプログラムは時間を見て訂正しておきます。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板