したらば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」が発生していしまいます。
何が原因なのでしょうか?

11igoten:2010/09/26(日) 21:50:06
データーをこぼしてしまうと言うことですよね、
こぼす場所はデーターの途中ですか、それとも
データーの最後ですか?

12名無しさん:2010/09/27(月) 16:07:19
取りこぼす部分はデータの最後の方です。
データの途中まで受信して、それ以降のデータが受信できていないようです。

13igoten:2010/09/27(月) 18:13:56
とりあえず
バッファのサイズを大きくしてみましょう。
'読み込み用のバッファ
buffer = New Byte(255) {}

buffer = New Byte(2559) {}
位に。

14名無しさん:2010/09/27(月) 18:21:31
バッファサイズなのですが、最大で8000バイト程のデータを受信するので
今回バッファサイズを9000バイトにしてましたがだめでした。

networkStream.BeginReadはそもそも全てのバイトを受信しないと
CALLBACKの処理へは進まないものなのでしょうか?

15igoten:2010/09/27(月) 20:06:57
もちろんバッファが一杯になれば通知が来るはずです。
OnReadCompleteの中で
Debug.Print(buffer.Length.ToString())
だけをさせてこぼすかどうか見てください。

それと「名無しさん」はレスが書きにくいので、なんか適当な
ハンドルネームを付けてください。

16たけ:2010/09/29(水) 17:52:46
以下の処理で一応解決はできました。

OnReadComplete の処理内で以下のようにSleep後にnetworkStream.DataAvailable
の値をチェックし、データを再取得するように致しました。


'受信バイト数が返る
Dim bytesRead As Integer = networkStream.EndRead(ar)

If bytesRead > 0 Then
'受信文字が有った
'受信部分だけ切り出す
Dim getByte As Byte() = New Byte(bytesRead - 1) {}
For i As Integer = 0 To bytesRead - 1
getByte(i) = buffer(i)
Next


''ここを追加 ↓↓↓↓↓
Thread.Sleep(300)
Do While networkStream.DataAvailable = True

Dim sbuffer = New Byte(9000) {}
Dim sLen As Integer

sLen = networkStream.Read(sbuffer, 0, sbuffer.Length)

ReDim Preserve getByte(bytesRead - 1 + sLen)

For ii As Integer = 0 To sLen - 1
getByte(bytesRead + ii) = sbuffer(ii)
Next

Thread.Sleep(300)

Loop
''追加終了 ↑↑↑↑↑


こんな対応で問題ないでしょうか?

17igoten:2010/09/29(水) 18:23:45
接続してくるクライアントの数にもよりますが、
Thread.Sleep(300)はちょっと長いですね。

18<削除>:<削除>
<削除>

19<削除>:<削除>
<削除>

20<削除>:<削除>
<削除>

21ノースフェイス アウトレット 通販:2013/10/18(金) 02:55:12
全国のザ・ノースフェイス 店舗一覧。全国のチェーン系ファッションアイテムショップを 地図から簡単に探せる【日本全国ファッションストアチェーンマップ】。チェーン系 ファッションアイテムショップ探しの決定版サイトです! ノースフェイス アウトレット 通販 http://thenorthface.genin.jp/


新着レスの表示


名前: E-mail(省略可)

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

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

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

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