欢迎来到天天文库
浏览记录
ID:32398516
大小:43.50 KB
页数:4页
时间:2019-02-04
《c#基于socket的cs模式的完整例子》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、所谓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应用程序。打开工程,往当前窗体中添加控件,如表1
2、7-6所示。表17-6 添加控件列表控 件NameTextListBoxlbInfoLabellabelButtonbutton1启动服务器设计好的界面如图17-2所示。接下来开始运用前面的知识设计服务器,主要分为以下步骤。(1)首先是对一些命名空间的包含,包括System.Net、System.Net.Sockets、System.IO和System.Threading。然后定义一系列的全局变量,如下所示。privateSockets; //定义Socket对象privateThreadth;
3、 //客户端连接服务器的线程publicSocketcSocket; //单个客户端连接的Socket对象publicNetworkStreamns; //网络流publicStreamReadersr; //流读取publicStreamWritersw; //流写入privatedelegatevoidSetTextCallback(); //用于操作主线程控件(2)接下来是设计客户端连
4、接的管理,主要包括服务器与客户端之间的连接和收发数据问题,把它们放在一个函数Communication里,如下所示。publicvoidCommunication(){ while(true) { try { cSocket=s.Accept(); //用cSocket来代表该客户端连接 if(cSocket.Connected) //测试是否连接成功 { ns=newNetworkStream(cSocket); //建立网络流,
5、便于数据的读取 sr=newStreamReader(ns); //实例化流读取对象 sw=newStreamWriter(ns); //实例化写入流对象 test(); //从流中读取 sw.WriteLine("收到请求,允许连接");//向流中写入数据 sw.Flush(); //清理缓冲区 } else { Mes
6、sageBox.Show("连接失败"); } } catch(SocketExceptionex) { MessageBox.Show(ex.Message); //捕获Socket异常 } catch(Exceptiones) { MessageBox.Show("其他异常"+es.Message); //捕获其他异常 } }}//以下代码的用法在第16章有关线程的用法时曾提到过,主要用于从当前线程操作主线程中的控件,这里就
7、不在赘//述publicvoidsend(){ lbInfo.Items.Add(sr.ReadLine()+"");}publicvoidtest(){ SetTextCallbackstcb=newSetTextCallback(send); Invoke(stcb);}(3)定义好与客户端的连接后,接下来需要利用线程来启动,双击“启动服务器”按钮,添加如下代码。button1.Enabled=false;s=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.T
8、cp);//创建Socket对象IPA
此文档下载收益归作者所有