ソケット通信で受信ができない

解決


あかい  2012-09-10 15:58:04  No: 143392  IP: [192.*.*.*]

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


どうすればいいのでしょうか?

編集 削除
オショウ  2012-09-16 13:40:26  No: 143393  IP: [192.*.*.*]

ns.Write した後、機器側が受け取って処理し、送信するまでに
ある程度の時間を要するはず。

が、PCの方は、Writeした直後、いきなり受信確認して、返事
を受信していなかったら終わってしまっているようで、その為
受信処理が行われていないかのような挙動になっています。

通常は、タイムアウト処理を入れて非同期通信させるのですが
どうしても同期通信で行いたいのであれば、Write後に待ち合わ
せ機能が必要です。もしくは、いきなり受信させて、タイムア
ウトでなく受信したらエンコードして・・・と言う風になろう
かと思いますが。

以上。参考まで

編集 削除
あかい  2012-09-19 17:25:56  No: 143394  IP: [192.*.*.*]

参考にさせていただきました。

ありがとうございました。

編集 削除