回 帖 发 新 帖 刷新版面

主题:网络C/S编程问题,高手进给个思路

请问高手,我想写个C/S程序,支持多用户同时接入,并同时处理多用户消息,但我用AcceptSocket()始终只能接受一个用户的数据我的代码是:
try
            {
                gameserver=new TcpListener(ipAddress,iport);
                gameserver.Start();
                statusBar1.Text="正在等待连接......";
                while(true)
                {
                    socket=gameserver.AcceptSocket();
                    listBox2.Items.Add(socket.RemoteEndPoint.ToString()+":大笑着走了进来");
                    while(true)
                    {
                        networkStream = new NetworkStream (socket1[i]) ;
                        //从当前数据流中读取一行字符,返回值是字符串
                        streamReader = new StreamReader ( networkStream ) ;
                        listBox2.Items.Add ( socket.RemoteEndPoint.ToString()+"说:" + streamReader.ReadLine()) ;
                    }


                }

            }
            catch(Exception err)
            {
                MessageBox.Show(err.Message); 
            }

回复列表 (共2个回复)

沙发

你可以为每个客户端建立一个线程,这样就能达到多人同时连接了.下面给你一段多开多线程的代码,
Public classlistenclient
{
 private System.Net.Sockets.Socket serverSocket;
 private System.Net.Sockets.Socket clientsocket;
 //构造函数
 public listenClient(Socket serverSocket)
{
this.serverSocket=serverSocket;
}
public void ServerThreadproc()
{
 while (true)
{
try{
   clientSocket=serverSocket.accept();
   ....
  }
catch(Exception ex){
 ....
}
}
}
}

然后把你上面的连接处理去掉,直接调用这个.如下:
listenClient lc=new listenClient(serverSocket);
ThreadStart serverThreadstart=new ThreadStart (lc.serverThreadProc);
Thread serverthread=new Thread(serverThreadStart);

板凳

楼主的代码有十分严重的资源泄漏问题

我来回复

您尚未登录,请登录后再回复。点此登录或注册