none
VB6とVB2008のソケット通信の件 RRS feed

  • 質問

  • VB6で作られたサーバソフトにVB2008のクライアントから接続、データの送受信をしないといけないのですが、コネクトは出来るのですがデータ送受信で文字化けを起こしますのでどなたか教えて頂けませんでしょうか。VB6同士は当然問題ありません。VB2008同士は例えそれができても用足しにはなりませんのでテストはしておりません。VB2008側ソフトは以下の手順です。"abc山山"をVB2008から送信するとVB6側では"abc??"となります。逆も同じです。VB6はWinsockコントロールです。そもそもVB6とVB2008の通信は無理なのかそれも教えて頂けないでしょうか。受信したデータをASCIIからUNICODEに変換すれば良いのかと思い色々やって見ましたが正常な表示がどうしてもできません。

           Dim stream As System.Net.Sockets.NetworkStream = tcpclient.GetStream()  

           Dim snddata(2000) As Byte

              snddata = System.Text.Encoding.ASCII.GetBytes(sndstr & vbCr)                        送信
              stream.Write(snddata, 0, snddata.Length)

           Dim data(20000) As Byte
              stream.Read(data, 0, data.Length)                                   受信
              redata = System.Text.Encoding.ASCII.GetString(data)

    2014年1月27日 8:24

回答

  • Encoding.ASCIIが返すEncodingオブジェクトは、アスキーコード0~127のみを扱うエンコーディングを指します。当然、日本語文字は扱えません。

    VB6側が文字列をどう扱っているのか(文字列をどうバイナリ化しているのか)知りませんが、大抵はUTF-16であるEncoding.UnicodeかShift_JIS(CP932)であるEncoding.GetEncoding(932)が返すEncodingオブジェクトで対応できるでしょう。

    2014年1月27日 8:56

すべての返信

  • Encoding.ASCIIが返すEncodingオブジェクトは、アスキーコード0~127のみを扱うエンコーディングを指します。当然、日本語文字は扱えません。

    VB6側が文字列をどう扱っているのか(文字列をどうバイナリ化しているのか)知りませんが、大抵はUTF-16であるEncoding.UnicodeかShift_JIS(CP932)であるEncoding.GetEncoding(932)が返すEncodingオブジェクトで対応できるでしょう。

    2014年1月27日 8:56
  • お名前が解らず失礼しますがencoding(932)でなおりました。数日間悩んでいたのが気が晴れました。何とお礼を言って良いか解りません。また何かありましたら是非教えてください。本当に有難うございました。

    2014年1月27日 13:34