Ich schreibe ein Programm, das Daten über UDP an einen bestimmten Server senden muss (was funktioniert) und auch Daten von diesem Server empfängt (was nicht funktioniert). Das Problem ist, dass der Port, an den ich Daten sende, nicht derselbe ist, von dem die Daten vom Server kommen.C# Empfangen über UDP
Server: Hört auf einem Port, erstellt neue Sockets (an verschiedenen Ports) für jeden Client, um Daten zu senden.
Ich habe den folgenden Code (Client-Seite):
socker = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint epLocal = new IPEndPoint(myIp, localPort);
socket.Bind(epLocal);
IPAddress ipAddressremote = IPAddress.Parse(remoteIp);
remoteEP = new IPEndPoint(ipAddressremote, port);
socket.Connect(remoteEP);
byte[] buffer = new byte[1024];
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(MessageCallBack), buffer);
socket.Send(someByteArray);
Diese erfolgreich zu meinem Server-Anwendung verbindet und sendet die Daten es soll. Allerdings wird MessageCallBack nie genannt:
private void MessageCallBack(IAsyncResult iAsyncResult)
{
byte[] receivedData = (byte[])iAsyncResult.AsyncState;
ASCIIEncoding eEncoding = new ASCIIEncoding();
string receievedMessage = eEncoding.GetString(receivedData);
handleMessage(receievedMessage);
byte[] buffer = new byte[1024];
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(MessageCallBack), buffer);
}
ich glaube, das Problem ist, dass der Client-Socket noch an den Port auf dem Server verbunden ist, und akzeptiert nur Daten aus diesem Hafen, aber meines Wissens ist dies kein Problem bei der Verwendung von BeginReceive anstelle von BeginReceiveFrom.
Warum muss der UDP-Server einen neuen Socket für jeden Client erstellen? – SergeyA
Ich dachte, das ist der Weg zu gehen, wenn der Server Daten an mehrere Clients senden muss ... lieg ich da falsch? –
Es gibt wirklich keinen Grund dafür. Single-Buchse wird gut funktionieren. – SergeyA