C#将多个参数传递给函数和数组

时间:2017-08-18 14:25:54

标签: c# arrays function webserver

我试图启动我的网络服务器"在所有本地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")
    };
}

1 个答案:

答案 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"));

我身边有很多猜测工作,因为并非所有信息都可以在您的问题中找到。如果有意义并且适合您,请告诉我