トップ回答者
TCP/IP通信を行いたい

質問
-
VS2012 VB windows8.1
TCP/IP通信において
コマンドプロンプトを立ち上げて
telnet 192.168.254.254 9999
と入力し、ある電化製品に接続し、
”K”という英字を入力すると生データ(英数字)が返ってきます。この
返ってくる英数字をVS2012の下記に示すコードによってtextbox2へ代入しようとしていますが上手くいきません。下記のコードをどのように変えればコマンドプロンプトみたいなことができるのでしょうか?
Dim port As Int32 = 9999
Dim client As New TcpClient("192.168.254.254", port)
' Translate the passed message into ASCII and store it as a Byte array.
Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes("K")
' Get a client stream for reading and writing.
' Stream stream = client.GetStream();
Dim stream As NetworkStream = client.GetStream()
' Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length)
Console.WriteLine("Sent: {0}", "K")
' Receive the TcpServer.response.
' Buffer to store the response bytes.
data = New [Byte](256) {}
' String to store the response ASCII representation.
Dim responseData As [String] = [String].Empty
' Read the first batch of the TcpServer response bytes.
Dim bytes As Int32 = stream.Read(data, 0, data.Length)
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
Console.WriteLine("Received: {0}", responseData)
TextBox2.Text = responseData
' Close everything.
stream.Close()
client.Close()
Console.WriteLine(ControlChars.Cr + " Press Enter to continue...")
Console.Read()
- 編集済み kirua777 2014年7月29日 13:51
回答
-
kirua777 さま よろしく。
Hongliang さまのご回答に補足。
以下のコードを入れて、直後にブレークポイントを入れてデバッグして見て下さい。
上の一行目は kirua777 さまの元々の文で 5文字(間違い)、次の2行は同じ答えの筈です。Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes("K" + "CR" + "LF") ' 5 文字になってますよ! Dim data2 As [Byte]() = System.Text.Encoding.ASCII.GetBytes("K" + vbCr + vbLf) Dim data3 As [Byte]() = System.Text.Encoding.ASCII.GetBytes(Chr(75) + Chr(13) + Chr(10)) '関数電卓で 16進 4b, 0d, 0a を各々 10進へ
- 編集済み ShiroYuki_Mot 2014年7月30日 1:39 上の一行 の行を編集 と誤字訂正
- 回答としてマーク kirua777 2014年7月30日 6:53
すべての返信
-
「上手くいきません」ではわかりません。技術系メーリングリストで質問するときのパターン・ランゲージなどを参考に結果の予想と実際の結果を提示すべきかと。
telnetで入力したのは本当に「K」1文字なのですか?
-
こちらも同じ質問でしょうか。
個人的には同じ質問を複数のサイトに分散することはやめた方がよいと思っています。
回答しよう、助言しようと考えている人々の時間を無駄にする可能性があるためです。
(一方のサイトで解決しているのに、他方のサイトに報告がなくて回答者が時間を使ってしまうとか、一方のサイトで否定した内容が他方のサイトで同じ内容が寄せられるとか)さて、私も佐祐理さんと似たポイントで気になっているのは、本当に "K" 1 文字だったのか、改行はないのか? というところです。
あとは 1 回の Read で想定した分量を得られないのなら繰り返し読むコードを入れないとだめかもしれませんね。 -
kirua777 さま よろしく。
Hongliang さまのご回答に補足。
以下のコードを入れて、直後にブレークポイントを入れてデバッグして見て下さい。
上の一行目は kirua777 さまの元々の文で 5文字(間違い)、次の2行は同じ答えの筈です。Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes("K" + "CR" + "LF") ' 5 文字になってますよ! Dim data2 As [Byte]() = System.Text.Encoding.ASCII.GetBytes("K" + vbCr + vbLf) Dim data3 As [Byte]() = System.Text.Encoding.ASCII.GetBytes(Chr(75) + Chr(13) + Chr(10)) '関数電卓で 16進 4b, 0d, 0a を各々 10進へ
- 編集済み ShiroYuki_Mot 2014年7月30日 1:39 上の一行 の行を編集 と誤字訂正
- 回答としてマーク kirua777 2014年7月30日 6:53