Brauchen Sie Hilfe mit multicast-udp-server-Entdeckung in c#

Als eine Art Nachtrag zu diese Frage habe ich mittlerweile ein Lösung funktioniert auf meinem lokalen Rechner, aber nicht auf einer Maschine im Netzwerk.

Ich weiß nicht allzu viel über sockets andere als die Grundlagen, so mit mir tragen. Das Ziel ist es, für einen Kunden zu suchen, der einen server auf einem lokalen Netzwerk, und das ist das Ergebnis von einigen Ausschneiden/einfügen/Bearbeiten von code.

Dies ist der client-code:

IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10294);

    byte[] data = new byte[1024];
    public Form1()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {

        Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 10);
        string welcome = "What's your IP?";
        data = Encoding.ASCII.GetBytes(welcome);
        client.SendTo(data, data.Length, SocketFlags.None, ipep);
        IPEndPoint server = new IPEndPoint(IPAddress.Any, 0);
        EndPoint tmpRemote = (EndPoint)server;
        data = new byte[1024];
        int recv = client.ReceiveFrom(data, ref tmpRemote);
        this.IP.Text = ((IPEndPoint)tmpRemote).Address.ToString(); //set textbox
        this.Port.Text = Encoding.ASCII.GetString(data, 0, recv); //set textbox
        client.Close();
    }

Dies ist der server-code:

int recv;
        byte[] data = new byte[1024];
        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 10294);
        Socket newsock = new Socket(AddressFamily.InterNetwork,
                SocketType.Dgram, ProtocolType.Udp);
        newsock.Bind(ipep);
        newsock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Any,IPAddress.Parse("127.0.0.1")));

        while (true)
        {
            Console.WriteLine("Waiting for a client...");
            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
            EndPoint tmpRemote = (EndPoint)(sender);
            data = new byte[1024];
            recv = newsock.ReceiveFrom(data, ref tmpRemote);
            Console.WriteLine("Message received from {0}:", tmpRemote.ToString());
            Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
            string welcome = "7010";
            data = Encoding.ASCII.GetBytes(welcome);
            newsock.SendTo(data, data.Length, SocketFlags.None, tmpRemote);
        }

Es funktioniert finden Sie auf meiner lokalen Maschine (server und client), aber wenn ich versuche an einem anderen Rechner im selben Netzwerk, ich habe die Meldung "Eine vorhandene Verbindung wurde zwangsweise geschlossen durch remote-host"

Ich merke, ich muss noch eine Menge von try/catch, aber ich bin nur versuchen, in den Griff zu bekommen, wie das funktioniert ersten.

InformationsquelleAutor Davy8 | 2008-10-17
Schreibe einen Kommentar