我把Socket的连接建成了数组。可是Socket连接进来后,我怎么把他分到某个线程,让他去侦听呢?谢谢!
Socket acceptSocket=myListen.AcceptSocket();
flashSocket[socketID]=acceptSocket;
//线程执行
subThread=new Thread(new ThreadStart(AcceptFlash));
subThread.Name="My" + threadID++;
subThread.Start();//开始此线程的执行
private void AcceptFlash()
{
//建立内部socket实例
Socket receiveSocket=flashSocket[socketID];
string endPointForClear=receiveSocket.RemoteEndPoint.ToString();
bool keepAlive=true;
string theTemp="";
//开始此实例的循环接受数据
while (keepAlive)
{
}

解决方案 »

  1.   

    我是这样实现的 本人用VB。NET的 不知道还有没有更好的办法
    这个是连接监听
            Listener = New TcpListener(Net.IPAddress.Parse("192.168.0.29"), 8617)
            Listener.Start()
            While ListenerRunning
                Application.DoEvents()
                SockCount = Sockets.Length
                ReDim Preserve Sockets(SockCount)
                
                Sockets(SockCount) = Listener.AcceptTcpClient            ReDim Preserve MyThread(SockCount)
                ReDim Preserve ListenClass(SockCount)            ListBox1.Items.Add(SockCount)            netStream = Sockets(SockCount).GetStream
                wtStream = New StreamWriter(netStream)
                wtStream.WriteLine("[1]" & SockCount)
                wtStream.Flush()            ListenClass(SockCount) = New My_Listen(Sockets, SockCount)
                MyThread(SockCount) = New Thread(AddressOf ListenClass(SockCount).CheckMsg)
                MyThread(SockCount).Start()
            End While写一个类 把监听放在里面
    Public Class My_Listen
        Private SocketNum As Integer
        Private Sockets() As TcpClient
        Private netStream As NetworkStream
        Private rdStream As StreamReader
        Private wtStream As StreamWriter
        Public running As Boolean = True    Public Sub New(ByVal _socktes() As TcpClient, ByVal _sockunm As Integer)
            SocketNum = _sockunm
            Sockets = _socktes
        End Sub    Public Sub CheckMsg()
            Dim i As Integer
            While running
                'If Sockets(i).GetStream.DataAvailable = True Then
                netStream = Sockets(SocketNum).GetStream
                rdStream = New StreamReader(netStream)
                Dim str As String = rdStream.ReadLine
                If str <> "" Then
                    MsgBox("来自" & SocketNum & "的消息:" & str)
                Else
                    Dim o As New Form1
                    o.closetcp(SocketNum)
                End If
            End While
        End Sub    Public Sub CloseStream()
            rdStream.Close()
            netStream.Close()
        End Sub
    End Class
      

  2.   

    顺便提一个问题 在Client端关闭了连接 Server端怎么才能知道啊?
      

  3.   

    //线程执行
    if(socketID>100)
    {
    threadID++;
    subThread=new Thread(new ThreadStart(AcceptFlash));
    subThread.Name="My" + threadID;
    subThread.Start();//开始此线程的执行
    }
    else
    {

    }
    假如象上面,当SocketID>100的时候开启一个新的线程。那么怎么控制这个新的线程去侦听100-200之间的Socket连接呢?
      

  4.   

    先建立一个线程再监听
    new Thread(new ThreadStart(AcceptFlash));
    private void AcceptFlash()
    {
    while(true)
    {
    myListen.AcceptSocket();}
    }
      

  5.   

    没理解你的意思  如果是想让线程监听100-200的Socket的话 可以根据threadID的值来判断这个线程是监听哪一段socket的啊  (threadID-1)*100到threadID*100 就是threadID所要监听的socket
    我是一个socket用的一个线程  socket用的阻塞
      

  6.   

    for(int k=1;k<thID*10;k++)
    {
    bool keepAlive=true;
    //开始此实例的循环接受数据
    while (keepAlive)
    {
    if (flashSocket[k].Poll(-1, SelectMode.SelectRead))
    {
    #region 接收数据的代码
    }
    }如上,每次有数据的时候为什么k都为1呢?