Als eine Art von Follow-up zu this question Ich habe eine Lösung auf meinem lokalen Rechner, aber nicht auf einer Maschine im Netzwerk arbeiten.Brauchen Sie Hilfe mit Multicast-UDP-Server-Erkennung in C#
Ich weiß nicht zu viel über Sockets außer diesen Grundlagen, also ertragen Sie mit mir. Das Ziel ist, dass ein Client nach einem Server in einem lokalen Netzwerk sucht, und dies ist das Ergebnis eines Codes zum Ausschneiden/Einfügen/Bearbeiten.
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 Code-Server:
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 auf meinem lokalen Rechner finden (Server und Client), aber wenn ich versuche, eine andere Maschine auf das gleiche Netzwerk bekomme ich "Eine bestehende Verbindung wurde zwangsweise durch den Remote-Host geschlossen"
Ich weiß, ich muss eine Menge Versuch/Fang hinzufügen, aber ich versuche nur, einen Griff zu bekommen, wie das funktioniert f Erstens.
Yeah, im Nachhinein, nachdem Sie erwähnt, dass das Sinn macht, zu der Zeit (da dies ist meist Kopieren/Einfügen Code) Ich nahm an, dass war, wo ich sendete, die natürlich, wenn ich aufhörte, darüber nachzudenken mehr macht keinen Sinn, wo ich sende. – Davy8
Ich werde es nicht bis Montag ausprobieren können, aber ich werde +1 und akzeptieren, wenn das funktioniert! – Davy8