我试图制作一个简单的服务器,我可以在大学和家庭之间使用。服务器工作正常,客户端可以连接。但我希望能够从本地网络外部进行连接。我试图找到一种方法来显示连接它所需的机器的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无法提供帮助。
答案 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。*。*等),您将无法从该网络外部访问它。