1
**Server Code**

Dim serverSocket As Socket
Dim clientSocket As Socket
Dim PubIP as String = "82.XX.XX.XX"
Dim LocalIP as String = "192.XX.XX.XX"

Dim byteData(1023) As Byte

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim host As String = Dns.GetHostName
    Dim ip As IPHostEntry = Dns.GetHostEntry(host)
    serverSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    Dim IpEndPoint As IPEndPoint = New IPEndPoint(System.Net.IPAddress.Parse(PubIP), 8080) 
    Me.Text = IpEndPoint.ToString
    serverSocket.Bind(IpEndPoint) 'it can't bind public ip but i need public ip to run the client from other pc and connect to server for chating.
    serverSocket.Listen(5)
    serverSocket.BeginAccept(New AsyncCallback(AddressOf OnAccept), Nothing)
End Sub

**Client Code**

Dim clientSocket As Socket
Dim byteData(1023) As Byte

Dim PubIP as String = "82.XX.XX.XX"
Dim LocalIP as String = "192.XX.XX.XX"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    clientSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    Dim ipAddress As IPAddress = ipAddress.Parse(PubIP)
    Dim ipEndPoint As IPEndPoint = New IPEndPoint(ipAddress, 8080)
    clientSocket.BeginConnect(ipEndPoint, New AsyncCallback(AddressOf OnConnect), Nothing)
End Sub

localip を使用してサーバーを実行すると、正常に実行され、自分のコンピューター (サーバーが実行されている場所) からのみクライアントに接続できます。別のコンピューターからクライアントを実行しようとすると、サーバーに接続できません。

そのため、パブリック IP を割り当てましたが、プログラムを実行すると Visual Studio に次のエラーが表示されます:要求されたアドレスは、そのコンテキストでは有効ではありません。

だから私はここで立ち往生しています。自分のコンピューターから実行した場合にのみクライアントに接続できますが、友人の PC から自分の PC のサーバーにクライアントを接続する必要があります。

任意の代替方法を歓迎します。

4

1 に答える 1

1

IPAddress.Any特定の IP アドレスの代わりに使用して、サーバーがすべてのインターフェイスで接続を受け入れるようにします。

それ以外に、「ローカル」および「パブリック」IPアドレスについて言及しているため、ネットワークアドレス変換ポート転送を理解する必要があります。

于 2013-01-18T19:24:59.757 に答える