投稿者 ポムNNN  (社会人) 投稿日時 2018/3/13 23:12:53
kiku様 情報ありがとうございます。

現状としましては、いくつか疑問はありますが、目的通り動いている状況です。毎回違う値をクライアントからサーバに送って、値が同じことを確認できました。

>・サーバは、複数クライアントからの同時接続に対応していない。※1対1の通信であるならば問題ありません。
  今回の1対1の通信用のアプリを作っています。いつかは複数台を受けることができるようにする予定です。

>・Sleepで待つのは良くないです。
過去の投稿にありました。勉強不足でした。ご指摘ありがとうございます。

> 13.サーバは、ClientとNetStream共に破棄していないため、クライアントからの2回目のデータ送信は受信できているが、サーバは、その受信データを読みだしていない。
についてですが、1回目の読み出し後、ClientとNetStreamを破棄してしまうと、2回目の読み出し前にAcceptTcpClient か それに代わる事をしなければないといけない気がするのですが、どうなのでしょうか?私の解釈間違いだったら、すみません。
クライントとサーバが接続しっぱなしでデータをやり取りする場合でも、読み込み終了の度に Closeするもんなのでしょうか?
なので Client と NetStreamのCloseはコメント扱いになっています・・・・。

他の部分は、前回の投稿と同じなので今回は、サーバ部分のみ記載しています。

 Public Sub DoWork()
        Dim server As TcpListener
        Dim Client As TcpClient
        Dim netstream As NetworkStream

        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))

            Client = server.AcceptTcpClient

            While Stop_Flg <> True

                Dim bytes(2) As Byte

                netstream = Client.GetStream
                Dim ReadSize As Integer = netstream.Read(bytes, 0, bytes.Length)

                If ReadSize > 0 Then
                    For Each i In bytes
                        Console.Write(Chr(i))
                    Next
                    Console.Write(vbNewLine)

                End If

            End While

            'netstream.Close()
            'Client.Close()

        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            server.Stop()
        End Try