一个TCP的多线程客户/服务器的应用程序

总结哈子:
服务器端
//获得本地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
    

转载于:https://www.cnblogs.com/huangyu-love/archive/2007/06/07/775643.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值