网站首页  |  幼儿教育  |  中小学教育  |  电脑教育  |  英语教育  |  教育论文  |  家长教育 设为首页加入收藏联系投稿 
 位置: 中国教育学习网 > 电脑教育 > 程序设计 > C#语言 > 正文

VisualC#中托管Socket的实现方法(二) (2)

字号:   

7.在Form1.cs中的Main函数之后,添加下列代码,下列代码的作用是定义过程“Listen”,此过程的功能是监听“8000”端口号,接收网络中连接请求,建立连接,并获取接收数据时使用的Socket实例,并以Socket实例来接收客户机程序发送来的数据。并根据客户机发送来控制码来断开网络连接,释放资源:
{

   try

      {

	tlTcpListen = new TcpListener ( port )  ;

	//以8000端口号来初始化TcpListener实例

	tlTcpListen.Start ( )  ;

	//开始监听网络的连接请求

	statusBar1.Text = "正在监听..."  ;

	stRead = tlTcpListen.AcceptSocket ( ) ;

	//通过连接请求,并获得接收数据时使用的Socket实例

	EndPoint tempRemoteEP = stRead.RemoteEndPoint  ;

	IPEndPoint tempRemoteIP =  ( IPEndPoint ) tempRemoteEP ;

	//获取请求的远程计算机名称

	IPHostEntry host = Dns.GetHostByAddress

         ( tempRemoteIP.Address ) ;

	string sHostName = host.HostName ;

	statusBar1.Text = "已经连接!" ;

	//循环侦听

	while (  blistener  )

	   {

	     string sTime = DateTime.Now.ToShortTimeString  ( )  ;

		//获取接收数据时的时间

		Byte [ ] byRead =new Byte [ 80 ] ;

		int iRead = stRead.ReceiveFrom 

                  ( byRead , ref tempRemoteEP ) ;

		//获得接收的字节数目

		Byte [ ] byText = new Byte [ iRead ] ;

		//并根据接收到的字节数目来定义字节数组

		Array.Copy  ( byRead , 0 , byText , 0 , iRead ) ;

		string sTemp = System.Text.Encoding.Default.

                   GetString ( byText ) ;

		//判断是否为断开连接控制码

		if  (  sTemp.Trim ( )  == "STOP"  )

		{

			stRead.Close ( ) ;

			tlTcpListen.Stop  (  )  ;

			 //关闭侦听

			statusBar1.Text = "连接已经关闭!"  ;

			thThreadRead.Abort  (   )  ;

			//中止线程

			return ;

		}

		else

		listBox1.Items.Add  (  sTime + " " + sTemp  )  ;

		

	}	catch  (  System.Security.SecurityException  ) 

	{

	MessageBox.Show  (  "侦听失败!"  , "错误"  )  ;

	}

}


8.用下列代码替换Form1.cs中的button1组件的Click事件对应的处理代码,下面代码是以刚刚定义“Listen”过程来初始化线程实例thThreadRead,并启动这个线程:

private void button1_Click ( object sender , System.EventArgs e )

{

thThreadRead = new Thread ( new ThreadStart ( Listen ) ) ;

//以Listen过程来初始化Thread实例

thThreadRead.Start (   ) ;

//启动线程

button1.Enabled = false  ;

}


至此,在保存上述的所有修改步骤之后。一个基于TCP协议的、利用Socket接收端程序的就完成了。图03和图04分别是上述二个示例运行后的界面

VisualC#中托管Socket的实现方法(二)

图03:【利用Socket来传送数据】的运行界面


VisualC#中托管Socket的实现方法(二)

图04:【利用Socket来接收数据】的运行界面


六.总结:

.Net FrameWork SDK中的Socket类的功能是非常强大的,要十分详细的介绍它,非一篇文章所能达到,本文所窥探的也只是其中的很小的一部分。但本文中介绍的二个示例在功能上虽不复杂,但在结构上却非常典型,Socket类的其他方面的应用在结构上大都也是如此。

在上面介绍的内容中,不仅介绍在Visual C#实现端口侦听、网络连接申请、数据发送、数据接收的具体方法,还介绍了在使用Visual C#实现网络功能是所必然要涉及到的如线程创建、线程销毁、资源回收和利用控制码控制程序运行状态等的实现方法。了解并掌握这些对我们编写功能更强、结构更复杂的网络应用程序是非常有帮助的。

最后要和诸位朋友谈一点小体会,就是在编写网络应用程序时,要非常细心,对应用程序在执行的各个环节都要考虑到位,因为在网络中会出现很多意想不到的问题,就是网络状态非常良好,也存在很多使用者方面的问题。如果在编写的程序中缺乏对这些意外的处理,就可能会导致整个应用程序出错,甚至崩溃。
收藏此文  |  打印  

 
  • 上一篇教程:

  • 下一篇教程:

  •   GoogLe
     
      最新推荐
  • 此栏目下没有推荐教程

  •   最近更新

      GoogLe

     
    Powered by Cn-Education.Com (c) 2005-2008 中国教育学习网 教育网站长QQ交流群60041790
    设为首页  |  加入收藏  |  版权申明  |  广告服务  |  联系我们  |  友情链接  |  网站地图  |  返回顶部 ↑