- - PR -
VB.NETでSocket通信
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-05 17:52
はじめまして。さっそくですが質問があります。
VB.NETでソケット通信クライアントシステムを構築しているのですが、そこで問題が発生しております。 本来はシーケンサとソケット通信を行うのですが、テストのために同じくVB.NETでサーバをつくりました。 クライアント側:
サーバ側:
この結果、サーバ側でデータResの値が(9,48,0,9,0,65,0,0,0,0)のみの受信になってしまいます。 このように送信データと受信データに差異が発生しており困っております。 どのような理由で、こういう差異が発生するのかご教示いただけないでしょうか。 宜しくお願いいたします。 | ||||||||
|
投稿日時: 2005-09-05 18:11
バイナリデータをStreamReaderで受信しないでください。
指定したエンコーディングで処理できないバイトは切り捨てられたり勝手に他の文字に変換されたりします。 //更に言えば、StreamReaderの既定のエンコーディングはUTF-8です。 バイナリデータを扱うのはBinaryReaderクラスです。 | ||||||||
|
投稿日時: 2005-09-06 22:18
Hongliangさん、アドバイスありがとうございました。
早速BinaryWriterおよびBinaryReaderを利用することにしました。 そこで新たに2点の質問が発生しました。 ・BinaryReaderクラスでサーバ側からバイナリデータを受信する場合、受信するサイズはどのように取得するのでしょうか。 BinaryReaderクラスのReadByteを利用しているのですが、読み取るバイト数をどのように取得できるかがわかりません。 ・サーバ側から16バイトのバイナリデータを送信してもらい、ReadByte(16)で取得してみたのですが、16バイト目のデータが正常に取得できません。 たとえば、、16バイト目が"AA"なら"0A"と、"99"なら"09"と・・・先頭4バイトが落ちてしまってるような形になってしまいます。 これにも使い方に原因があるのでしょうか。 申し訳ございませんが、再度ご教示のほどよろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-09-07 00:11
TCPにそんな仕組みはありません。したがって読み取るべきデータサイズを固定長にするか、データサイズもTCPで送信する(例:HTTP1.1)か、あるいはデータ終端が分かるようにデリミタを決める(例
#それは4バイトではなく、4ビットでは・・・ TCP/IPではデータを1オクテット(8bit)単位で扱うので4bitだけ取れないという状況は創造できません。おそらくコーディングを間違えているのでしょう。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ [ メッセージ編集済み 編集者: 甕星 編集日時 2005-09-07 00:12 ] | ||||||||
1
