Ich habe an einem Socket -Server -Programm in C# gearbeitet (ich war von diesem Beitrag inspiriert) und mein Problem ist, dass ein Client eine Ausnahme abnimmt. Ich verstehe nicht, warum meine doreceiveFrom () Funktion aufgerufen wird, wenn es nichts zu lesen gibt. Ich habe wahrscheinlich etwas verpasst. Was ist falsch?int dataLen = this.serverSocket.EndReceiveFrom(iar, ref clientEP);
< /code>
Der vollständige Quellcode: < /p>
class UDPServer
{
private Socket serverSocket = null;
private List clientList = new List();
private List dataList = new List();
private byte[] byteData = new byte[1024];
private int port = 4242;
public List DataList
{
private set { this.dataList = value; }
get { return (this.dataList); }
}
public UDPServer(int port)
{
this.port = port;
}
public void Start()
{
this.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
this.serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
this.serverSocket.Bind(new IPEndPoint(IPAddress.Any, this.port));
EndPoint newClientEP = new IPEndPoint(IPAddress.Any, 0);
this.serverSocket.BeginReceiveFrom(this.byteData, 0, this.byteData.Length, SocketFlags.None, ref newClientEP, DoReceiveFrom, newClientEP);
}
private void DoReceiveFrom(IAsyncResult iar)
{
try
{
EndPoint clientEP = new IPEndPoint(IPAddress.Any, 0);
int dataLen = this.serverSocket.EndReceiveFrom(iar, ref clientEP);
byte[] data = new byte[dataLen];
Array.Copy(this.byteData, data, dataLen);
if (!this.clientList.Any(client => client.Equals(clientEP)))
this.clientList.Add(clientEP);
EndPoint newClientEP = new IPEndPoint(IPAddress.Any, 0);
this.serverSocket.BeginReceiveFrom(this.byteData, 0, this.byteData.Length, SocketFlags.None, ref newClientEP, DoReceiveFrom, newClientEP);
DataList.Add(Tuple.Create(clientEP, data));
}
catch (ObjectDisposedException)
{
}
}
public void SendTo(byte[] data, EndPoint clientEP)
{
try
{
this.serverSocket.SendTo(data, clientEP);
}
catch (System.Net.Sockets.SocketException)
{
this.clientList.Remove(clientEP);
}
}
public void SendToAll(byte[] data)
{
foreach (var client in this.clientList)
{
this.SendTo(data, client);
}
}
public void Stop()
{
this.serverSocket.Close();
this.serverSocket = null;
this.dataList.Clear();
this.clientList.Clear();
}
}
< /code>
Ausnahme: < /p>
An existing connection was forcibly closed by the remote host
< /code>
Update: < /strong>
Ich habe versucht, meinen Client (netcat) auf einem anderen PC auszuführen, und die Ausnahme erscheint nicht mehr, selbst wenn sendto () < /strong> auch problematisch, um meine Client zu löschen.>
C# UDP -Server Asynchron Multiple Clients | SocketException, wenn der Client die Verbindung trennen ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Oracle Weblogic Server: java.net.socketException "Zu viele geöffnete Dateien"
by Anonymous » » in Java - 0 Replies
- 19 Views
-
Last post by Anonymous
-