总结哈子:
服务器端
//获得本地IPAddress的对象
static void Main(string args[])
{
    IPAddress ipAddr=Dns.Resolve("sjk49").AddressList[0];
    //初始化监听套接字,在指定的IP和端口监听
    TcpListener clientListener=new TcpListener(ipAddr,ECHO_PORT);
    //开始监听
    clientListener.Start();
    Console.WriteLine("Waiting for connections...");     
    while(true)
    {   
     //接受挂起的连接请求,返回一个单独与客户端通信的TcpClient     
     TcpClient client=clientListener.AcceptTcpClient();     
     ClientHandler cHandler=new ClientHandler();
     cHandler.clientSocket=client;
     Thread clientThread=new Thread(new ThreadStart(cHandler.RunClient));
     clientThread.Start();
     if(nClients<=0)
      break;
    }    
}
这里由于是一个服务器端,多个客户端,所以定义了一个ClientHandler类专门来处理与各个客户端进行通信,主线程不断地接受客户端发起的连接.并创立相应的客户端处理线程及其相应的委托方法来处理.
ClientHandler类
public class ClientHandler
 {
  public TcpClient clientSocket;
  public void RunClient()
  {
   StreamReader readerStream=new StreamReader(clientSocket.GetStream());
   NetworkStream writerStream=clientSocket.GetStream();

   string returnData=readerStream.ReadLine();
   string userName=returnData;
   Console.WriteLine("Welcome"+userName+"to the Server");   while(true)
   {
    returnData=readerStream.ReadLine();
    if(returnData.IndexOf("QUIT")>-1)
    {
     Console.WriteLine("Bye Bye"+userName);     
     break;
    }
    Console.WriteLine(userName+":"+returnData);
    returnData+="\r\n";

    byte[]dataWrite=Encoding.ASCII.GetBytes(returnData);
    writerStream.Write(dataWrite,0,dataWrite.Length);
   }
   clientSocket.Close();
  }
 }
一个通常的服务器端使用两个Socket,一个是TcpListener,另一个在接受某个客户端的连接时返回,而它们之间的通信可以用Socket的Send()和Receive()方法或者利用网络流NetWorkStream
    

posted on 2007-06-07 18:36  钰狼  阅读(4294)  评论(0编辑  收藏  举报