DOBON.NET DOBON.NETプログラミング掲示板過去ログ

socket通信で一文字ずつしか送れないのですが

環境/言語:[WindowsXP Microsoft VisualBasic2010]
分類:[.NET]

とある機器にsocket通信で命令文を送りたくてプログラム中です。
ユニコードで"build('XAngle',12)"という文字列送るのが目的です。
以下のコードで接続には成功するのですが、

'**************************************

Public Class Form1
Private objSck As New System.Net.Sockets.TcpClient
Private objStm As System.Net.Sockets.NetworkStream
Private Sub Form1_Load( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
objSck.Connect("192.51.248.211", 5123)
objStm = objSck.GetStream()
End Sub

Private Sub Button1_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Dim dat As Byte() = _
System.Text.Encoding.GetEncoding("utf-16").GetBytes("build('XAngle',12)")
objStm.Write(dat, 0, dat.GetLength(0))
End Sub
End Class


**************************************
socket関連のサンプルではたいてい1文字ずつ送っているようで、相手機器側で

"b" SyntaxError
"u" SyntaxError
"i" SyntaxError
"l" SyntaxError



となってしまいます・・・
一行ずつ送るにはどうすればよいでしょうか?
■No29585に返信(hanadaさんの記事)
> System.Text.Encoding.GetEncoding("utf-16").GetBytes("build('XAngle',12)")

utf-16 だと、"build(…" は
 62 00 75 00 69 00 6C 00 64 00 28 00 …
になりますし、utf-8 や ASCII だと
 62 75 69 6C 64 28 …
になりますね。


> ユニコードで"build('XAngle',12)"という文字列送るのが目的です。

文字集合が Unicode という事は分かりましたが、エンコードは何でしょうか。

1 文字ずつ分断されて解釈されてしまうということは、もしかして受け取り側が、
UTF-16(LE) ではなく UTF-8 を望んでいる…ということは無いでしょうか。
素早い回答ありがとうございます!
受け取り側の仕様はよく分かりませんが、おっしゃる通りUTF-8にすれば解決しました。


■No29586に返信(魔界の仮面弁士さんの記事)
> ■No29585に返信(hanadaさんの記事)
>>System.Text.Encoding.GetEncoding("utf-16").GetBytes("build('XAngle',12)")
>
> utf-16 だと、"build(…" は
>  62 00 75 00 69 00 6C 00 64 00 28 00 …
> になりますし、utf-8 や ASCII だと
>  62 75 69 6C 64 28 …
> になりますね。
>
>
>>ユニコードで"build('XAngle',12)"という文字列送るのが目的です。
>
> 文字集合が Unicode という事は分かりましたが、エンコードは何でしょうか。
>
> 1 文字ずつ分断されて解釈されてしまうということは、もしかして受け取り側が、
> UTF-16(LE) ではなく UTF-8 を望んでいる…ということは無いでしょうか。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板