客户端是否已经断开连接???
你可以在可户端定时发送你自定义的信号来,如果没有那么短线,其他你可以在连接异常中也可判断断弦。我要响应7-15个客户端,用什么办法最好?
写一个client类,在里面写一些事件。
然后诗服器程序用异步来接受信息。
public Client( TcpClient client ) //Sub New ( ) vb.net中构造
{
//
// TODO: 在此处添加构造函数逻辑
//
mobjClient = client ;
mobjClient.SendTimeout = 10000 ; // 等待发送操作完成时间10000
//mobjClient.ReceiveBufferSize = 1024 //设置接收缓冲区1024
mobjClient.SendBufferSize = 1024 ; //设置发送缓冲区1024
//RaiseEvent Connected(Me)
try
{
//TcpClient 读取 NetworkStream 数据到 marData 从 0 到 1024 字节 ,异步调用 DoStreamReceive 方法处理
NetworkStream _nStream = mobjClient.GetStream ( ) ;
_nStream.BeginRead ( marData , 0 , 1024 , new AsyncCallback ( DoStreamReceive ) , null ) ;
}
catch
{
if ( Disconnected != null ) 
{
//Invokes the delegates.
Disconnected ( this ) ; 
//RaiseEvent Disconnected(Me);
}
}
}
//=============================================================================
// 接收数据流
// 1.DoStreamReceive
// 循环读取 Stream 数据,HandleReceivedData
//=============================================================================
private void DoStreamReceive ( IAsyncResult iar ) 
{
// MessageBox.Show ( "DoStreamReceive读取 Stream 数据" ) ;
int intCount ; //读取的数据的字节数
try
{
//异步中 EndRead 数据
lock ( mobjClient.GetStream ( ) ) //SyncLock mobjClient.GetStream vb.net中lock
{
NetworkStream _nStream = mobjClient.GetStream( ) ;
intCount = _nStream.EndRead( iar ) ;
}
DataReceiveCompleted ( marData , 0 , intCount ) ;
//重新开始异步 BeginRead 数据
lock ( mobjClient.GetStream ( ) )
{
NetworkStream _nStream = mobjClient.GetStream( ) ;
_nStream.BeginRead ( marData , 0 , 1024 , new AsyncCallback ( DoStreamReceive ) , null ) ;
}
}
catch
{
Disconnected ( this ) ;
}
}

解决方案 »

  1.   

    Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick        Dim CurThreadStart As ThreadStart
            Dim CurThread As Thread
            Dim ThreadCount As Integer
            Dim i As Integer        If Not Listener.Pending() Then '没有挂起的请求则退出.不用处理.
                Exit Sub
            End If        Timer1.Enabled = False        If ActiveThreads > CInt(txtMaxThreads.Text) Then
                Timer1.Enabled = True
                Exit Sub
            End If        CurThreadStart = New ThreadStart(AddressOf ProcessRequest)
            CurThread = New Thread(CurThreadStart)        CurThread.Start()
            SyncLock CurThread
                ActiveThreads += 1 '新开线程,线程总数加1
            End SyncLock        Timer1.Enabled = True    End Sub