C#基于SocketCS模式完整例子.doc
文本预览下载声明
所谓C/S模式中的C是Client,表示客户端,S是Server,表示服务器;还有另外一个模式B/S,B是Browser,表示浏览器,S是Server,表示服务器。C/S模式主要是指在Winform中进行开发,而B/S主要是在ASP.NET中进行开发。本节先介绍C/S模式,有关B/S模式将会在后面有关ASP.NET的章节中进行介绍。基于Socket服务器端实现本例主要是建立多客户端与服务器之间的数据传输,首先设计服务器。打开VS2008,在D:\C#\ch17目录下建立名为SocketServer的Windows应用程序。打开工程,往当前窗体中添加控件,如表17-6所示。表17-6??添加控件列表
控? ? 件NameTextListBoxlbInfoLabellabelButtonbutton1启动服务器设计好的界面如图17-2所示。接下来开始运用前面的知识设计服务器,主要分为以下步骤。(1)首先是对一些命名空间的包含,包括System.Net、System.Net.Sockets、System.IO和System.Threading。然后定义一系列的全局变量,如下所示。private Socket s;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//定义Socket对象private Thread th;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//客户端连接服务器的线程public Socket cSocket;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//单个客户端连接的Socket对象public NetworkStream ns;? ?? ?? ?? ?? ?? ?? ?? ?? ? //网络流public StreamReader sr;? ?? ?? ?? ?? ?? ?? ?? ?//流读取public StreamWriter sw;? ?? ?? ?? ?? ?? ?? ?? ?//流写入private delegate void SetTextCallback();? ?? ?? ?//用于操作主线程控件(2)接下来是设计客户端连接的管理,主要包括服务器与客户端之间的连接和收发数据问题,把它们放在一个函数Communication里,如下所示。public void Communication(){? ? while (true)? ? {? ?? ???try? ?? ???{? ?? ?? ?? ?cSocket = s.Accept();? ?? ?? ?? ?? ?? ? //用cSocket来代表该客户端连接? ?? ?? ?? ?if (cSocket.Connected)? ?? ?? ?? ?? ?? ?//测试是否连接成功? ?? ?? ?? ?{? ?? ?? ?? ?? ? ns = new NetworkStream(cSocket);??//建立网络流,便于数据的读取? ?? ?? ?? ?? ? sr = new StreamReader(ns);? ?? ?? ?//实例化流读取对象? ?? ?? ?? ?? ? sw = new StreamWriter(ns);? ?? ?? ?//实例化写入流对象? ?? ?? ?? ?? ? test();? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //从流中读取? ?? ?? ?? ?? ? sw.WriteLine(收到请求,允许连接); //向流中写入数据? ?? ?? ?? ?? ? sw.Flush();? ?? ?? ?? ?? ?? ?? ?? ?? ?//清理缓冲区? ?? ?? ?? ?}? ?? ?? ?? ?else? ?? ?? ?? ?{? ?? ?? ?? ?? ? MessageBox.Show(连接失败);? ?? ?? ?? ?}? ?? ???}? ?? ???catch (SocketException ex)? ?? ???{? ?? ?? ?? ?MessageBox.Show(ex.Message);? ?? ?? ???//捕获Socket异常? ?? ???}? ?? ???catch (Exception es)? ?? ???{? ?? ?? ?? ?MessageBox.Show(其他异常 + es.Message);? ?? ?//捕获其他异常? ?? ???}? ? }}//以下代码的用法在第16章有关线程的用法时曾提到过,主要用于从当前线程操作主线程中的控件,这里
显示全部