Hola, encuentro la respuesta a mi pregunta. Creo hilo adicional para aceptar la conexión. Por ejemplo:
Anterior
IPEndPoint myEndpoint = new IPEndPoint(IPAddress.Parse(_serverAddress), _port);
_serverSocket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_serverSocket.Bind(myEndpoint);
_serverSocket.Listen((int)SocketOptionName.MaxConnections);
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket);
.....
private void AcceptCallback(IAsyncResult result)
{
ConnectionInfo connection = new ConnectionInfo();
try
{
Socket s = (Socket)result.AsyncState;
connection.Socket = s.EndAccept(result);
connection.Buffer = new byte[1024];
connection.Socket.BeginReceive(connection.Buffer,
0, connection.Buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback),
connection);
}
catch (SocketException exc)
{
CloseConnection(connection, "Exception in Accept");
}
catch (Exception exc)
{
CloseConnection(connection, "Exception in Accept");
}
finally
{
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), result.AsyncState);
}
}
Por esta conexión de cliente manera contar sin raize 800
Actualmente escribo esto:
IPEndPoint myEndpoint = new IPEndPoint(IPAddress.Parse(_serverAddress), _port);
_serverSocket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_serverSocket.Bind(myEndpoint);
_serverSocket.Listen((int)SocketOptionName.MaxConnections);
acceptThread = new Thread(new ThreadStart(ExecuteAccept));
acceptThread.Start();
......
private void ExecuteAccept()
{
while (true)
{
ConnectionInfo connection = new ConnectionInfo();
try
{
connection.Socket = _serverSocket.Accept();
connection.Buffer = new byte[1024];
connection.Socket.BeginReceive(connection.Buffer, 0, connection.Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), connection);
}
catch (SocketException exc)
{
CloseConnection(connection, "Exception in Accept");
}
catch (Exception exc)
{
CloseConnection(connection, "Exception in Accept");
}
}
}
Por esta conexión de cliente manera contar raize más de 2.000. Lee y escribo lo hago con BeginXXX y EndXXX.
Parece que la cola de escucha está llena. ¿Puedes pegar algún código? –
Un enrutador o un firewall también pueden limitar el rango de puertos disponibles. – Groo
@Groo solo hay un puerto en juego aquí, el puerto en el que el servidor está escuchando. – EJP