VisualBasicでもソケット通信(Tcp通信)、だけどその前に

|

以前、C言語でTCP/IPのソケット通信の記事「TCP/IPプログラムのいろはは、DOS窓でWinSockAPI」を書きましたので、VisualBasicでも使ってみようかと。だけどその前に、VBにとって重要そうな(私だけ?)エンドポイントについて。

VBでは、ネットワークアドレスとサービスポートの組み合わせを「エンドポイント」と呼びます。

ネットワークアドレスは、ネットワーク上の特定のデバイス(例えば、PCなど)を識別します。ポート番号は、そのデバイス上の特定のサービスの接続先(例えば、メール)を識別します。

TCP/IPは、ネットワークアドレスとサービスポート番号を使用して、一意にサービスを識別し、通信しています。

インターネット検索すると、エンドポイント(EndPoint)の決め方が色々ある様ですので、目に付いたものの内容を確認してみる事に。


<注意点>

・EndPoint確認のネットワーク環境
 (1)無し、自PC内動作 ⇒ 外部接続無し、単独動作
 (2)LAN、LAN内動作 ⇒ 外部接続無し、DHCPが192.168.x.yを配布
 (3)インターネット、外部動作 ⇒ 外部接続有(デュアルスタック)

・どんな相手でも受け入れてしまうAnyアドレス(0.0.0.0)は、利用しない方が宜しいかと。

・エラー処理は手抜きです。


お試し環境
  Windows7 64bit Edition
  Visual Basic 2008 AnyCPU対象


/*-------------------------------- お試し結果 ------------------------------*/

・(1)ネットワーク接続は無し、自PC内動作

①IPv6、ループバック
エンドポイント確認1、接続無し

②IPv6、ループバック
エンドポイント確認2、接続無し

③IPv6、ループバック
エンドポイント確認3、接続無し

④IPv4、ループバック
エンドポイント確認4、接続無し

⑤IPv4、未指定アドレス
エンドポイント確認5、接続無し

⑥IPv4、ループバック
エンドポイント確認6、接続無し

⑦IPv4、ループバック
エンドポイント確認7、接続無し

⑧IPv4、未指定アドレス
エンドポイント確認8、接続無し

⑨例外発生(そのようなホストは不明です)


・(2)ネットワーク接続はLAN、LAN内動作

①IPv6、リンクローカルアドレス
エンドポイント確認1、LAN接続

②IPv6、ループバック
エンドポイント確認2、LAN接続

③IPv6、リンクローカルアドレス
エンドポイント確認3、LAN接続

④IPv4、ループバック
エンドポイント確認4、LAN接続

⑤IPv4、未指定アドレス
エンドポイント確認5、LAN接続

⑥IPv4、プライベートアドレス
エンドポイント確認6、LAN接続

⑦IPv4、ループバック
エンドポイント確認7、LAN接続

⑧IPv4、未指定アドレス
エンドポイント確認8、LAN接続

⑨例外発生(そのようなホストは不明です)


・(3)ネットワーク接続はインターネット、外部動作

①IPv6、リンクローカルアドレス
エンドポイント確認1、インターネット接続

②IPv6、ループバック
エンドポイント確認2、インターネット接続

③IPv6、リンクローカルアドレス
エンドポイント確認3、インターネット接続

④IPv4、ループバック
エンドポイント確認4、インターネット接続

⑤IPv4、未指定アドレス
エンドポイント確認5、インターネット接続

⑥IPv4、グローバルアドレス
エンドポイント確認6、インターネット接続

⑦IPv4、ループバック
エンドポイント確認7、インターネット接続

⑧IPv4、未指定アドレス
エンドポイント確認8、インターネット接続

⑨IPv4、リモートアドレス
エンドポイント確認9、インターネット接続


/*----------------------------------------------------------------------------*/


/*-------------------------------- お試しソース ----------------------------*/

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim remoteEndPoint As Net.IPEndPoint
        Dim msg As String

        Dim port As Integer = 22000

        ' ① EndPoint check1
        Dim ipHostInfo As Net.IPHostEntry = Net.Dns.GetHostEntry(Net.Dns.GetHostName())
        Dim ipAddress As Net.IPAddress = ipHostInfo.AddressList(0)
        Dim localEndPoint As New Net.IPEndPoint(ipAddress, port)

        msg = "ipHostInfo : " & ipHostInfo.ToString & vbCrLf & _
              "ipAddress : " & ipAddress.ToString & vbCrLf & _
              "localEndPoint : " & localEndPoint.ToString
        MsgBox(msg, MsgBoxStyle.Information, "Check local EndPoint1")

        ' ② EndPoint check2
        ipHostInfo = Net.Dns.GetHostEntry("localhost")
        ipAddress = ipHostInfo.AddressList(0)
        localEndPoint = New Net.IPEndPoint(ipAddress, port)

        msg = "ipHostInfo : " & ipHostInfo.ToString & vbCrLf & _
              "ipAddress : " & ipAddress.ToString & vbCrLf & _
              "localEndPoint : " & localEndPoint.ToString
        MsgBox(msg, MsgBoxStyle.Information, "Check local EndPoint2")

        ' ③ EndPoint check3
        ipHostInfo = Net.Dns.GetHostEntry("127.0.0.1")
        ipAddress = ipHostInfo.AddressList(0)
        localEndPoint = New Net.IPEndPoint(ipAddress, port)

        msg = "ipHostInfo : " & ipHostInfo.ToString & vbCrLf & _
              "ipAddress : " & ipAddress.ToString & vbCrLf & _
              "localEndPoint : " & localEndPoint.ToString
        MsgBox(msg, MsgBoxStyle.Information, "Check local EndPoint3")

        ' ④ EndPoint check4
        ipAddress = Net.IPAddress.Parse("127.0.0.1")
        localEndPoint = New Net.IPEndPoint(ipAddress, port)

        msg = "ipAddress : " & ipAddress.ToString & vbCrLf & _
              "localEndPoint : " & localEndPoint.ToString
        MsgBox(msg, MsgBoxStyle.Information, "Check local EndPoint4")

        ' ⑤ EndPoint check5
        localEndPoint = New Net.IPEndPoint(Net.IPAddress.Any, port)

        msg = "localEndPoint : " & localEndPoint.ToString
        MsgBox(msg, MsgBoxStyle.Information, "Check local EndPoint5")

        ' ⑥ EndPoint check6
        ipHostInfo = Net.Dns.Resolve(Net.Dns.GetHostName())
        ipAddress = ipHostInfo.AddressList(0)
        localEndPoint = New Net.IPEndPoint(ipAddress, port)

        msg = "ipHostInfo : " & ipHostInfo.ToString & vbCrLf & _
              "ipAddress : " & ipAddress.ToString & vbCrLf & _
              "localEndPoint : " & localEndPoint.ToString
        MsgBox(msg, MsgBoxStyle.Information, "Check local EndPoint6")

        ' ⑦ EndPoint check7
        ipHostInfo = Net.Dns.Resolve("localhost")
        ipAddress = ipHostInfo.AddressList(0)
        localEndPoint = New Net.IPEndPoint(ipAddress, port)

        msg = "ipHostInfo : " & ipHostInfo.ToString & vbCrLf & _
              "ipAddress : " & ipAddress.ToString & vbCrLf & _
              "localEndPoint : " & localEndPoint.ToString
        MsgBox(msg, MsgBoxStyle.Information, "Check local EndPoint7")

        ' ⑧ EndPoint check8
        ipAddress = Net.Dns.Resolve(Net.IPAddress.Any.ToString()).AddressList(0)
        localEndPoint = New Net.IPEndPoint(ipAddress, port)

        msg = "ipAddress : " & ipAddress.ToString & vbCrLf & _
              "localEndPoint : " & localEndPoint.ToString
        MsgBox(msg, MsgBoxStyle.Information, "Check local EndPoint8")

        ' ⑨ EndPoint check9
        Try
            ipHostInfo = Net.Dns.GetHostEntry("www.nifty.com")
            ipAddress = ipHostInfo.AddressList(0)
            remoteEndPoint = New Net.IPEndPoint(ipAddress, port)

            msg = "ipHostInfo : " & ipHostInfo.ToString & vbCrLf & _
                  "ipAddress : " & ipAddress.ToString & vbCrLf & _
                  "remoteEndPoint : " & remoteEndPoint.ToString
            MsgBox(msg, MsgBoxStyle.Information, "Check remote EndPoint9")

        Catch ex As Net.Sockets.SocketException
            Debug.Print("SocketException : {0}", ex.ToString())
        Catch ex As Exception
            Debug.Print("Unexpected exception : {0}", ex.ToString())
        End Try

    End Sub

End Class

/*----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------*/
/*============================================================================*/

このブログ記事について

このページは、微禄が2022年1月 7日 19:27に書いたブログ記事です。

ひとつ前のブログ記事は「VB作成のプログラム動作がWOW64配下かどうか、IsWow64Process関数で確認」です。

次のブログ記事は「VisualBasicでもソケット通信-Socket編」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

NOP法人 アジアチャイルドサポート 最も大切なボランティアは、自分自身が一生懸命に生きること