[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
|
メール
| |
VB2005のSocket通信サーバーの複数クライアントについて
1
:
名無しさん
:2010/09/21(火) 12:31:20
C#、VB2005のSocket通信サーバーの複数クライアントの非同期処理の
サンプルコードをDLして、ソケット通信のマルチ受信を行っている
のですが、「OnReadComplete」関数内で記載されている
「Thread.Sleep(20) 'これを入れないとNullReferenceExceptionが起きる」
という記載ですが、これを記載していても「networkStream.Close()」の
処理で「NullReferenceException」が発生していしまいます。
何が原因なのでしょうか?
2
:
igoten
:2010/09/21(火) 13:08:28
実行環境の違いでしょうかね。
Thread.Sleep(100);
位にして時間を長くしても同じですか?
3
:
名無しさん
:2010/09/22(水) 09:04:28
Sleepを色々変更しましたがだめでした。
処理として、OnReadComplete関数内でOracle(10.2.0.1)に接続し、
データを取得後、取得結果を返信するような作りにしていますが、
その部分が問題なのでしょうか?
ちなみに、NullReferenceException が発生すると何か障害があるのでしょうか?
また、セカンドスレッドで作成されるいかのクラス、
Dim handler As New ClientHandler(socketForClient, Me)
は、どの段階でメモリを解放されるのでしょうか?
特に気にする必要はないのでしょうか?
4
:
igoten
:2010/09/22(水) 10:12:36
>OnReadComplete関数内でOracle(10.2.0.1)に接続し..
OnReadCompleteが呼びだされている時はスレッドがブロックされています。
従ってOnReadComplete内では時間のかかる処理は出来ません。
Oracleを呼び出すような処理は別スレッドを作成してその中で行います。
>NullReferenceException が発生すると何か障害があるのでしょうか?
問題はどの処理の時に上記のエラーが発生するかです。
Sleepを入れてあるのはsocketをcloseするのに多少時間がかかって、
socket=nullでエラーが起きるためです。
socketが解放出来無い時何が起こるかはわかりません、リソースの使用が増える
ことは確かですが、それがガベージコレクションで解放されるのか否かと、
socketにどの位のリソースが食われるかは未確認です。
Sleepは止めてしまってタイマーなんかで相当時間を置いてからsoketを
解放する方が良いかもしれません。
>Dim handler As New ClientHandler(socketForClient, Me)
これらのインスタンスはガベージコレクションに任せておいて問題ないと
思います。
新着レスの表示
名前:
E-mail
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板