サーバ側で同一のポートで待ち受けしようとしてSocketExceptionが発生しています。
VB.NET
1 'サーバーの接続の確立
2 Public Function ServerStart() As Boolean
3
4 'ListenするIPアドレス
5 Dim IP As System.Net.IPAddress
6
7 'サーバーのIPアドレス(または、ホスト名)とポート番号をテキストボックスから取得
8 IpAdress = ServerForm.textBoxIp.text
9 IP = System.Net.IPAddress.Parse(IpAdress)
10 Port = Integer.Parse(ServerForm.textBoxPortNo.Text)
11
12 'TcpListenerを使用してサーバーの接続の確立
13 Try
14 'lisenerが無い場合
15 If listener Is Nothing Then
16 'TcpListenerオブジェクトを作成する
17 listener = New TcpListener(IP, Port)
18 End If
19
20 'Listenを開始 = クライアント接続要求の受付開始
21 listener.Start() ’ここでSocketExceptionが発生
22
23 'ログの書き込み
24 RaiseEvent WriteLog(DateTime.Now.ToString() & Space(1) & "サーバを開始しました。")
25
26 'スレッドの作成と開始
27 threadServer = New Thread(New ThreadStart(AddressOf ServerListen))
28 threadServer.Start()
29 Return True
30
31 Catch ex As Exception
32 'エラーが起きた場合
33 RaiseEvent WriteLog("サーバ接続エラー:" & ex.Message.ToString())
34 listener.Stop()
35 RaiseEvent ChangeIndicator(Color.Navy)
36 Return False
37 End Try
38 End Function
39
原因としては待ち受けポートを設定する際
VB.NET
1 Port = Integer.Parse(ServerForm.textBoxPortNo.Text)
とA~Dどの画面から呼ばれる場合でも同一のフォームのtextBoxPortNo.Text
を参照していて画面側で
いくらポートを変更していても同じ値になってしまっています。
せっかくプロパティとして作成しているのですからTCPクラスからポートの値を取りに行くのではなく
VB.NET
1 'ソケット通信開始
2 Private Sub StartSock()
3 '接続確認フラグ
4 Dim OpenFlg As Boolean
5
6 TCP.Port = Integer.Parse(Me.textBoxPortNo.Text)
7 OpenFlg = TCP.ServerStart()
8
9 If OpenFlg Then
10 StartServerbtn.Enabled = False
11 StopServerbtn.Enabled = True
12 End If
13
14 End Sub
と画面の方でTCPクラスのプロパティをセットすべきです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/12 11:40