tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル指定バイトの読込がうまくいかない
記事No9822
投稿日: 2010/01/22(Fri) 19:59
投稿者CP9A
環境は.NET Framework V3.5 VB 2008 OS:XPで使用しています。

'サーバーから送られたデータを受信する
Dim resBytes(256) As Byte
Dim resSize As Integer

Do
    'データの一部を受信する
    resSize = ns.Read(resBytes, 0, resBytes.Length)

Loop While ns.DataAvailable

上記で受信データが64バイトで受信しているときに、先頭から24バイト分を受信しようと
    resSize = ns.Read(resBytes, 0, 24)
とすると(integer型の変数に24を代入しても同じでした)
64バイトデータの48番目からresBytesに入るのですがサイズが有効になっていない
ようですがどういうことなんでしょうか?

Loop While ns.DataAvailableの条件ではループしてしまうので
最後の方のバイト数になりますね。解決です。

[ツリー表示へ]
タイトルRe: 指定バイトの読込がうまくいかない
記事No9824
投稿日: 2010/01/23(Sat) 10:02
投稿者魔界の仮面弁士
> 'サーバーから送られたデータを受信する
> Dim resBytes(256) As Byte
配列のサイズが中途半端な気がしますが大丈夫ですか?
(上記だと、256個の要素ではなく、0〜256までの計257個の要素が生成されます。

>     'データの一部を受信する
>     resSize = ns.Read(resBytes, 0, resBytes.Length)
変数 ns の正体が分かりませんが、使い方からして、
System.Net.Sockets.NetworkStream クラスでしょうか?

> Loop While ns.DataAvailable
ループ中には、これ以外のコードは記述していないのでしょうか?

> 上記で受信データが64バイトで受信しているときに、
一回のループで、resBytes.Length が 64 だったのでしょうか?

> 先頭から24バイト分を受信しようと
>     resSize = ns.Read(resBytes, 0, 24)
書き込み位置は、先頭からの resBytes(0)〜resBytes(23)の位置になりますが、
読み込む位置は、全64バイト中の先頭からであるとは限らないかと。

> Loop While ns.DataAvailableの条件ではループしてしまうので
> 最後の方のバイト数になりますね。解決です。
…? 話をあまり理解できていないのですが、これって後から追記された一文なのでしょうか。

---
追記:

下記で解決されて、その結果報告で追記された…という事のようですね。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=45995

[ツリー表示へ]