[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
|
メール
| |
VB2005のSocket通信の複数クライアントの非同期処理
1
:
たけ
:2011/02/04(金) 19:41:27
VB2005のSocket通信サーバーの複数クライアントの非同期処理
を参考にマルチスレッドの通信サーバを作成させて頂きました。
順調に動作はしているのでうが、同時接続は何台まで可能かと
質問を受けました。
色々とネット等々で調べたのですが、よくわかりません。
何か御存じでしょうか?
ちなみに通信サーバが稼働しているOSはWindows2003Serverに
なります。
1つの通信サーバで最大同時接続が何台まで可能なものでしょうか?
2
:
igoten
: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をはずしてみたのですが、
データ取得ミスは発生しなくなりました。(今のところ)
原因がわかないのであまり気持ちよくないのですが、
何か心当たりなどありましたらお教え願います。
4
:
igoten
:2011/02/09(水) 22:10:45
すみません金曜まで出張なのでお待ちください。
5
:
igoten
: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);
は不要と言うか入れてはいけませんでした。
サンプルプログラムは時間を見て訂正しておきます。
6
:
ひろ4932
:2011/02/12(土) 15:13:19
ご回答有難うございます。
>OnReadCompleteで全てのデーターを読み込んで、bufferの読み込み位置を
>0にクリアーする為に
>networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null);
>を入れています。
OnReadCompleteの最後にBeginReadをしている理由がわかりました。
>何故なら私のプログラムは送信はボタンで任意の時にデーターを送る
>仕様になっています。
>従って、データー受信中に送信のボタンを押すと、読み込みバッファが
>クリアされて途中からデーターを格納しはじめてしまいます。
受信中の送信動作が可能(受信と送信が非同期)な仕様ということですね。
私も仕様を理解していませんでした。
実は、受信と送信がぶつかったときは通信エラーになると思っていたものですから。
それと異常時の受信データの件ですが、
途中からデーターを格納しはじめるというとそうなんですが、
単純に受信バッファの先頭から途中データが入っているという
わけではないのですが、その辺は送受信のタイミングによって
どういう挙動をするかは不明なのでそうなるのかもしれません。
どうも有難うございました。
又、何かありましたら宜しくお願いします。
新着レスの表示
名前:
E-mail
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板