creo que es posible, aquí es un ejemplo de código abierto escrito en VB.NET y C#:
https://github.com/perrybutler/dotnetsockets/
Usa Event-based Asynchronous Pattern (EAP), IAsyncResult Pattern y grupo de subprocesos (IOCP). Enviará/clasificará los mensajes (los mensajes pueden ser cualquier objeto nativo como una instancia de clase) en paquetes binarios, transferirá los paquetes a través de TCP y luego deserializará/desempaquetará los paquetes en el extremo receptor para que pueda trabajar con su objeto nativo . Esta parte es algo así como Protobuf o RPC.
Originalmente se desarrolló como un "código de red" para juegos multijugador en tiempo real, pero puede servir para muchos propósitos. Lamentablemente, nunca llegué a usarlo. Tal vez alguien más lo hará.
El código fuente tiene muchos comentarios, por lo que debería ser fácil de seguir. ¡Disfrutar!
EDITAR: Después de las pruebas de estrés y algunas optimizaciones, pudo aceptar 16,357 clientes antes de alcanzar los límites del OS. Aquí están los resultados:
Simulating 1000 client connections over 16 iterations...
1) 485.0278 ms
2) 452.0259 ms
3) 495.0283 ms
4) 476.0272 ms
5) 472.027 ms
6) 477.0273 ms
7) 522.0299 ms
8) 516.0295 ms
9) 457.0261 ms
10) 506.029 ms
11) 474.0271 ms
12) 496.0283 ms
13) 545.0312 ms
14) 516.0295 ms
15) 517.0296 ms
16) 540.0309 ms
All iterations complete. Total duration: 7949.4547 ms
ahora que es con todos los clientes que se ejecutan en la máquina local y enviar un pequeño mensaje al servidor justo después de la conexión. En una prueba posterior en un sistema diferente, el servidor se estaba agotando en un poco más de 64,000 conexiones de cliente (¡límite de puerto alcanzado!) A aproximadamente 2000 por segundo, consumiendo 238 MB de RAM.
¿'BeginRead' (http://msdn.microsoft.com/en-us/library/system.io.stream.beginread.aspx) logra eso? – Gabe
Todas las E/S de red en Windows podrían ser asíncronas, basadas en eventos y sin multithreading en los días de 16 bits porque la programación de Windows está basada en eventos y Win16 no era multiproceso. – Gabe
@Gabe, vea mi comentario en contra de la respuesta de @ Jeremy. – Jeff