- PR -

VB2008文字列を結合できない?

1
投稿者投稿内容
リック
会議室デビュー日: 2008/04/03
投稿数: 2
投稿日時: 2008-04-03 17:41
VB2008でソケット通信をおこなっていますが、受信したメッセージにキャリッジリターンとラインフィードが含まれると文字列をうまく処理できません。
どなたかご存知ないですか?
以下ソース抜粋。
With objNetworkStream
Do
 If .DataAvailable = True Then
 intReceiveLength = .Read(bytReceiveBuffer, 0, bytReceiveBuffer.Length)
strReceivedData = System.Text.Encoding.Default.GetString(bytReceiveBuffer).Substring(0, intReceiveLength)
   If Not strReceivedData Is Nothing Then
 TextBox1.Text = "クライアントから「" & strReceivedData & "」を受信!"
Debug.Print("「" & strReceivedData & "」")
strIpAdd = Mid(strReceivedData, 5, 15)
strIpAdd = Trim(strIpAdd)
Debug.Print("IP=" & strIpAdd & vbCrLf)
strSendDate = CStr(Format(DateTime.Now, "yyyyMMddHHmmss"))

デバックを行っていると、文字列であるstrReceivedDataのデータ後半が認識されていないようです。
具体的には、
Dim strAA as String="123456789"
とすれば、コーディング画面で変数にカーソルを合わせれば、"123456789"と表示されますが、strReceivedDataの場合、、"123456789 となり最後の"が表示されません。
VB6.0では正常なのですが、何か制限があるのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-04-04 10:28
引用:

リックさんの書き込み (2008-04-03 17:41) より:

デバックを行っていると、文字列であるstrReceivedDataのデータ後半が認識されていないようです。
(snip)
Dim strAA as String="123456789"
とすれば、コーディング画面で変数にカーソルを合わせれば、"123456789"と表示されますが、strReceivedDataの場合、、"123456789 となり最後の"が表示されません。


このことからして、CR や LF が受信されているのではなく不正な文字が受信されているのだと思われます。 不正な文字というと、たとえばですが NullChar の場合はモロにこの現象が起きます。

コード:

    Dim st As String = "0123456789"
    st &= vbNullChar & "ABCDEFGHIJ"

    Me.TextBox1.Text = st


と同じ現象でしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
リック
会議室デビュー日: 2008/04/03
投稿数: 2
投稿日時: 2008-04-04 11:26
じゃんぬねっとさん、ご教授ありがとうございます。

おっしゃるとおり、不正なデータが出ているのかと思いVB6.0でも行ってみました。
もちろん、データを送信する機器は共通です。
ところが、VB6.0では正常にCR、LFを受信するのです。

ちなみに受信したデータの終わりに何があるのかVB2008のASC関数で調べてみましたが
51番でした。本当に51であれば表示されるはずですがそれも表示されません。

まったく原因がわからない状況です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-04-04 11:32
引用:

リックさんの書き込み (2008-04-04 11:26) より:

おっしゃるとおり、不正なデータが出ているのかと思いVB6.0でも行ってみました。
もちろん、データを送信する機器は共通です。
ところが、VB6.0では正常にCR、LFを受信するのです。


これではあまり問題の切り分けにならないような気がします。 VB6 と比較検証するならば、同じデータを送信してバイナリ レベルで 1 つ 1 つ比較して 「完全に一致していることを確認」 しないと意味がありません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)