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(
"当前连接数:"
+ 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);
}
}
}
联系客服