- - PR -
Socketでの通信形式について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-06-15 19:21
いつもお世話になります。
今、Socketの勉強をしていて、分からないことがあり 有知識者にご教授頂きたく質問させていただきます。 @通信時に データ長(int型:2バイト)+データ部(可変) の書式でデータを送信したいと考えております。 この場合、 使用するデータの中身は、int型(2バイト)/ASCII(8バイト)/S-JIS(任意)の 組み合わせとなるのですが 送信するデータをそれぞれbyte配列に変換する必要性があると思うのですが 変換方法はどのような方法となるのでしょうか? A又、それらのデータを結合する(int(2バイト) + S-JIS(任意))簡単な方法など あるのでしょうか(単純にループ処理で組み合わせる?) 下記に実装コードを記載します。 Public sub Send() tcpClient = New System.Net.Sockets.TcpClient tcpClient.Connect("Localhost", 8000) Dim networkStream As NetworkStream = tcpClient.GetStream() Dim sendText As String = "test" If networkStream.CanWrite And networkStream.CanRead Then '実際にはここで通信フォーマットのデータを作成したいと考えています。 Dim sendBytes As Byte() = Encoding.ASCII.GetBytes(sendText) networkStream.Write(sendBytes, 0, sendBytes.Length) Dim bytes(tcpClient.ReceiveBufferSize) As Byte networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) Dim returndata As String = Encoding.ASCII.GetString(bytes) Else If Not networkStream.CanRead Then st.Text = ("Could not write data to data stream") tcpClient.Close() Else If Not networkStream.CanWrite Then tcpClient.Close() End If End If End If End Sub よろしくおねがいします。 | ||||
|
投稿日時: 2007-06-15 20:23
有知識者です。 ←昔使ったことがあるようなフレーズだな…
BitConverterクラスを使うといいかな。 ここら辺も参考になりますかね〜 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11404&forum=7 | ||||
|
投稿日時: 2007-06-15 20:47
こんな感じかな。 動くかわからないですが。 >変換方法はどのような方法となるのでしょうか? 文字列はEncoding.GetBytes。 数字はBitConverter使ってEndian を確認すること。 >又、それらのデータを結合する(int(2バイト) + S-JIS(任意))簡単な方法など あるのでしょうか(単純にループ処理で組み合わせる?) 相当特殊な場合を除いて、 結合せずにNetworkStreamに2回送るべき。 | ||||
|
投稿日時: 2007-06-16 09:08
さっそくのご回答ありがとうございます。
ご教授いただいた内容で確認したいとおもいます。 ありがとうございました。 |
1