Я работал над программой Socket Server в C# (я был вдохновлен из этого поста), и моя проблема заключается в том, что, когда клиент отключает исключение " существующее соединение было насильно закрыто удаленным хостом ", когда вызов endreceivefrom () и возвращает 0
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>
Исключение: < /p>
An existing connection was forcibly closed by the remote host
< /code>
Обновление: < /strong>
Я пытался запустить своего клиента (netcat) на другом ПК, и исключение больше не появляется, даже когда sendto () < /strong>, что также проблематично, чтобы удалить мой клиент в < /strong>.>
Подробнее здесь: https://stackoverflow.com/questions/235 ... n-client-d
C# UDP Server Асинхронные несколько клиентов | SocketException, когда клиент отключите ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
UDP -сервер асинхронные несколько клиентов | SocketException, когда клиент отключается
Anonymous » » в форуме C# - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Когда iOS 17 отправляет UDP, System Net Sockets SocketException (65): Norout на хост
Anonymous » » в форуме IOS - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-
-
-
C# UDP-сервер с несколькими асинхронными клиентами | SocketException при отключении клиента
Anonymous » » в форуме C# - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-