Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
TcpListenerについて
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30317#CommentId83184
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
ポムNNN
 (社会人)
投稿日時
2018/3/10 15:55:48
visual studio2015 で arduinoとパソコン をTCP/IPで通信するソフトを作っています。
arduinoがクライント、PCがサーバになるようにプログラムしています。
動作としましては、ボタン1でサーバを開始し、ボタン2でサーバ停止というプログラムになっています。
arduino側で 接続→送信→切断 のループのプログラムで動かすと上手くいくのですが、
初回接続後、接続しっぱなしで、arduinoからデータを送り続けるというパターンが上手くいきません。
下記プログラムの Client = server.AcceptTcpClient の部分が悪さをしている気がしました。
理由としては、arduinoからの接続要求が来ないのでサーバはダンマリ停止している状況だと判断しました。
使用するメソッドが間違っているのでしょうか?アドバイス頂けたらと思います。
Imports System.Net.Sockets
Imports System.Net
Public Class Form1
Private Stop_Flg As Boolean
Private server As TcpListener
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text = ""
Task.Run(Sub() DoWork())
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Stop_Flg = True
End Sub
Public Sub DoWork()
server = Nothing
Stop_Flg = False
Try
Dim port As Integer = 9000
Dim localAddr As IPAddress = IPAddress.Parse("192.168.250.19")
server = New TcpListener(localAddr, port)
server.Start()
Invoke(New Action(Sub()
TextBox1.Text = "サーバー開始"
End Sub))
Dim data As String = Nothing
Dim Client As TcpClient = Nothing
Dim NetStream As NetworkStream
While Stop_Flg <> True
If server.Pending Then
While Stop_Flg <> True
Client = server.AcceptTcpClient
NetStream = Client.GetStream
Threading.Thread.Sleep(100) '相手からデータ到着までの待機時間
If NetStream.DataAvailable = True Then
Dim reader As New IO.BinaryReader(NetStream)
Dim bytes As Byte() = reader.ReadBytes(3)
For Each i In bytes
Console.Write(Chr(i)) ' "123" と表示される
Next
Console.Write(vbNewLine)
reader.Close()
End If
End While
Client.Close()
Else
Threading.Thread.Sleep(0)
End If
End While
Catch e As Exception
MsgBox(e.ToString)
Finally
server.Stop()
TextBox1.Text = "終了"
End Try
End Sub
End Class