Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
TcpListenerについて
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30317#CommentId83187
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
ポム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