我试图启动我的网络服务器"在所有本地IP上。所以我必须将一个字符串发送到WebServer ws = new WebServer(SendResponse, IPs.GetIPs("program"));
,将一个数组发送到static string[] uris
。
现在它只收到一个IP,尝试了其他一些方法,例如将字符串发送到WebServer ws = new WebServer(SendResponse, IPs.GetIPs("program"));
,但这也不适用于多个IP。
需要为string
返回program
,为webserver
返回一个数组。
字符串应该是这样的:" http://192.168.0.107:1337/"," http://192.168.56.1:1337/" program
。
如何向函数和数组发送超过1个参数。我知道这段代码不起作用,但我现在绝望地让这个代码发挥作用。
IPs.cs:
public static string GetIPs(string args)
{
string[] combinedString = { };
List<string> IPAdressenLijst = new List<string>();
IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
foreach (IPAddress ip in ips)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
if (args == "program")
{
IPAdressenLijst.Add("http://" + ip + ":1337/");
combinedString = IPAdressenLijst.ToArray();
}
else if (args == "webserver")
{
IPAdressenLijst.Add("http://" + ip + ":1337/start/");
IPAdressenLijst.Add("http://" + ip + ":1337/stop/");
combinedString = IPAdressenLijst.ToArray();
}
}
}
return combinedString[0];
}
的Program.cs:
static void Main(string[] args)
{
Console.WriteLine(DateTime.Now + " Press any key to exit.");
//WebServer ws = new WebServer(SendResponse, "http://192.168.0.107:1337/", "http://localhost:1337/");
WebServer ws = new WebServer(SendResponse, IPs.GetIPs("program"));
ws.Run();
Console.ReadKey();
ws.Stop();
}
public static string SendResponse(HttpListenerRequest request)
{
return string.Format("TEST");
}
WebServer.cs:
public class WebServer
{
//static string[] uris =
//{
// "http://192.168.0.107:1337/start/",
// "http://192.168.0.107:1337/stop/"
//};
static string[] uris =
{
IPs.GetIPs("webserver")
};
}
答案 0 :(得分:0)
要启动TcpListener
(针对您的网络服务器),您可以使用下面的IPAddress.Any
地址:
var server = new TcpListener(IPAddress.Any, port);
现在,对于您的代码:GetIPs
函数有很多问题。循环时,每次都会覆盖combinedString
。最重要的是,您实际上只是从combinedString
返回第一项。从问题的上下文中,我收集到您想要返回所有IP地址而不仅仅是一个
这就是该功能应该是
的方式public static List<string> GetIPs(string args) {
var ipAdressenLijst = new List<string>();
IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
foreach (IPAddress ip in ips) {
if (ip.AddressFamily == AddressFamily.InterNetwork) {
if (args == "program") {
ipAdressenLijst.Add("http://" + ip + ":1337/");
} else if (args == "webserver") {
ipAdressenLijst.Add("http://" + ip + ":1337/start/");
ipAdressenLijst.Add("http://" + ip + ":1337/stop/");
}
}
}
return ipAdressenLijst;
}
您的Webserver.cs代码应如下所示,以处理传入的URI数组。
public class WebServer {
string[] Uris;
public WebServer(Func<HttpListenerRequest, string> sendResponse, IEnumerable<string> ipAdressenLijst)
{
Uris = ipAdressenLijst.ToArray();
}
}
在Program.cs中的Main
函数中,您的调用应该类似于
WebServer ws = new WebServer(SendResponse, IPs.GetIPs("webserver"));
我身边有很多猜测工作,因为并非所有信息都可以在您的问题中找到。如果有意义并且适合您,请告诉我