浅析C#中的套接字编程(2)

浅析C#中的套接字编程(2)
作者: 王凯明   www.ASPCool.com 时间:2002-4-10 21:17:46  

     下面,我就向大家具体介绍该实例:
  
  
  服务器端程序:
  
  
  1. 打开VS.net,新建一个C#的模板为“Windows 应用程序”的项目,不妨命名为“ChatServer”。
  
  
  2. 布置界面。只需在界面上添加一个ListBox控件即可,该控件主要用于显示客户端的用户的一些信息的。图象如下:
  
  
  
  
  3. 服务器端程序的代码编写。
  
  
  对于服务器端,主要的作用是监听客户端的连接请求并确认其请求。程序一开始便打开一个StartListening()线程。
  
  
  private void StartListening()
  
  
  {
  
  
  listener = new TcpListener(listenport);
  
  
  listener.Start();
  
  
  while (true)
  
  
  {
  
  
  try
  
  
  {
  
  
  Socket s = listener.AcceptSocket();
  
  
  clientsocket = s;
  
  
  clientservice = new Thread(new ThreadStart(ServiceClient));
  
  
  clientservice.Start();
  
  
  }
  
  
  catch(Exception e)
  
  
  {
  
  
  Console.WriteLine(e.ToString() );
  
  
  }
  
  
  }
  
  
  }
  
  
  该线程是一直处于运行状态的。当服务器端接收到一个来自客户端的连接请求后,它就打开一个ServiceClient()线程来服务客户端。当一个连接被建立后,每个客户端就被赋予一个属于它自己的套接字。同时,一个Client类的对象被建立。该对象包含了客户端的一些相关信息,该信息被保存在一个数组列表中。Client类如下(也可参见源代码中的Client.cs文件):
  
  
  using System;
  
  
  using System.Threading;
  
  
  
  
  namespace ChatServer
  
  
  {
  
  
  using System.Net.Sockets;
  
  
  using System.Net;
  
  
  
  
  ///
  
  
  /// Client 的摘要说明。
  
  
  ///
  
  
  public class Client
  
  
  {
  
  
  private Thread clthread;
  
  
  private EndPoint endpoint;
  
  
  private string name;
  
  
  private Socket sock;
  
  
  
  
  public Client(string _name, EndPoint _endpoint, Thread _thread, Socket _sock)
  
  
  {
  
  
  // TODO: 在此处添加构造函数逻辑
  
  
  clthread = _thread;
  
  
  endpoint = _endpoint;
  
  
  name = _name;
  
  
  sock = _sock;
  
  
  }
  
  
  
  
  public override string ToString()
  
  
  {
  
  
  return endpoint.ToString()+ " : " + name;
  
  
  }
  
  
  
  
  public Thread CLThread
  
  
  {
  
  
  get{return clthread;}
  
  
  set{clthread = value;}
  
  
  }
  
  
  
  
  public EndPoint Host
  
  
  {
  
  
  get{return endpoint;}
  
  
  set{endpoint = value;}
  
  
  }
  
  
  
  
  public string Name
  
  
  {
  
  
  get{return name;}
  
  
  set{name = value;}
  
  
  }
  
  
  
  
  public Socket Sock
  
  
  {
  
  
  get{return sock;}
  
  
  set{sock = value;}
  
  
  }
  
  
  }
  
  
  }

你可能感兴趣的:(.NET技术(包括转贴))