public partial class COMService {
private int maxLink = 100000;
private int currentLinked;
private ManualResetEvent tcpClientConnected = new ManualResetEvent( false );
public void Start() {
Thread thread = new Thread( new ParameterizedThreadStart(ShowStat));
thread.IsBackground = true ;
thread.Start();
TcpListener server = new TcpListener( new System.Net.IPEndPoint(0, 8090));
server.Start(100);
tcpClientConnected.Reset();
IAsyncResult result = server.BeginAcceptTcpClient( new AsyncCallback(Acceptor), server);
tcpClientConnected.WaitOne();
}
private void ShowStat( object o) {
while ( true ) {
lock ( typeof (COMService)) {
Console.WriteLine( "當(dāng)前連接數(shù):" + currentLinked + "/" + maxLink);
}
Thread.Sleep(2000);
}
}
private void Acceptor(IAsyncResult o) {
TcpListener server = o.AsyncState as TcpListener;
Debug.Assert(server != null );
TcpClient client = null ;
try {
client = server.EndAcceptTcpClient(o);
System.Threading.Interlocked.Increment( ref currentLinked);
} catch {
}
IAsyncResult result = server.BeginAcceptTcpClient( new AsyncCallback(Acceptor), server);
if (client == null ) {
return ;
} else {
Thread.CurrentThread.Join();
}
Close(client);
}
private void Close(TcpClient client) {
if (client.Connected) {
client.Client.Shutdown(SocketShutdown.Both);
}
client.Client.Close();
client.Close();
System.Threading.Interlocked.Decrement( ref currentLinked);
}
}
}
|