VB2010で、PCと自動機をLANでつなぎ、ソケット通信を行いデータの送受信を行いたいのですが、以下のプログラムだと、
「ns.DataAvailable」がfalseになってしまい、受信処理まで進めません。
tcp = New System.Net.Sockets.TcpClient("1.1.1.100", 1024)
ns = tcp.GetStream()
Dim dat As Byte() = _
System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes(CByte(Val("&H" + wk)))
ns.Write(dat, 0, dat.GetLength(0))
If ns.DataAvailable = True Then
Dim dat As Byte() = New Byte(tcp.Available - 1) {}
ns.Read(dat, 0, dat.GetLength(0))
rcvbuf = rcvbuf & System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(dat)
End If
どうすればいいのでしょうか?
ns.Write した後、機器側が受け取って処理し、送信するまでに
ある程度の時間を要するはず。
が、PCの方は、Writeした直後、いきなり受信確認して、返事
を受信していなかったら終わってしまっているようで、その為
受信処理が行われていないかのような挙動になっています。
通常は、タイムアウト処理を入れて非同期通信させるのですが
どうしても同期通信で行いたいのであれば、Write後に待ち合わ
せ機能が必要です。もしくは、いきなり受信させて、タイムア
ウトでなく受信したらエンコードして・・・と言う風になろう
かと思いますが。
以上。参考まで
参考にさせていただきました。
ありがとうございました。
ツイート | ![]() |