显示本地计算机的IP地址以便连接到网络外部?

时间:2017-02-07 19:09:54

标签: c# tcp server ip

我试图制作一个简单的服务器,我可以在大学和家庭之间使用。服务器工作正常,客户端可以连接。但我希望能够从本地网络外部进行连接。我试图找到一种方法来显示连接它所需的机器的IP地址:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;

namespace SocketProgramming
{
    class Program
    {

    private static byte[] _buffer = new byte[1024];
    private static Socket _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    private static List<Socket> _clientSockets = new List<Socket>();
    private static List<string> _nicknames = new List<string>();

    static void Main(string[] args)
    {

        SetupServer();
        Console.ReadLine();

    }

    private static void SetupServer()
    {

        Console.Write("Enter a port number to establish the server on: ");
        int portNum = Int32.Parse(Console.ReadLine());
        _serverSocket.Bind(new IPEndPoint(IPAddress.Any, portNum));
        _serverSocket.Listen(5);

        _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);

    }
}
}

如何获取本地计算机的IP地址?我希望能够在任何机器上运行此代码,因此在代码中使用静态IP无法提供帮助。

2 个答案:

答案 0 :(得分:1)

在尝试解决同一问题时,post对我非常有帮助。我的实现代码最后使用this answer稍加修改,以确切指定我想要的协议类型。

:hover

答案 1 :(得分:1)

值得注意的是,一台机器可能有多个IP地址。您可以使用dos或powershell cmd行中的'ipconfig'命令获取快速列表。您可以在c#中执行类似的操作:

        foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces()) {
            Console.WriteLine("Name: " + netInterface.Name);
            Console.WriteLine("Description: " + netInterface.Description);
            Console.WriteLine("Addresses: ");
            IPInterfaceProperties ipProps = netInterface.GetIPProperties();
            foreach (UnicastIPAddressInformation addr in ipProps.UnicastAddresses) {
                Console.WriteLine(" " + addr.Address.ToString());
                }
            Console.WriteLine("");
            }

请参阅:Get All IP Addresses On Machine

此外,如果尝试访问远程计算机,您可能会遇到防火墙/路由器问题。如果您的主机IP是非路由地址(例如10。*。*。*,或192.168。*。*等),您将无法从该网络外部访问它。