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

Visual C#托管Socket的实现方法(一) (3)

字号:   

6.在Form1的class代码区中加入下列代码,下列代码的作用是定义全局变量和创建全局使用的实例:
int port = 8000 ;

//定义侦听端口号

private TcpClient tcpc  ;

//对服务器端创建TCP连接

private Socket stSend ;	

//创建发送数据套接字

private bool tcpConnect = false ;

//定义标识符,用以表示TCP连接是否建立


7.用下列代码替换Form1.cs中的button1组件的Click事件对应的处理代码,下列代码的功能是初始化以创建的Socket实例,并向远程终结点提出连接申请,并判断连接是否建立:

private void button1_Click 

( object sender , System.EventArgs e )

{

	//以下代码是判断是否和远程终结点成功连接

	try

	{

		stSend = new Socket ( AddressFamily.InterNetwork , 

                  SocketType.Stream , ProtocolType.Tcp ) ;

		//初始化一个Socket实例

		IPEndPoint tempRemoteIP = new IPEndPoint 

                  ( IPAddress.Parse ( textBox1.Text ) , port ) ;

		//根据IP地址和端口号创建远程终结点

		EndPoint epTemp =  ( EndPoint ) tempRemoteIP ;

		stSend.Connect ( epTemp ) ;

		//连接远程主机的8000端口号

		statusBar1.Text = "成功连接远程计算机!" ;

		tcpConnect = true ;

		button1.Enabled = false  ;

		button2.Enabled = true  ;

	}

	catch ( Exception )

	{

		statusBar1.Text = "目标计算机拒绝连接请求!" ;

	}	

}


8.用下列代码替换Form1.cs中button2组件的Click事件对应的处理代码,下列代码的功能是通过已建立的连接,利用Socket来传送数据到远程主机。

private void button2_Click 

( object sender , System.EventArgs e )

{

	int iLength = textBox2.Text.Length ;

	//获取要发送的数据的长度

	Byte [ ] bySend = new byte [ iLength ] ;

	//根据获取的长度定义一个Byte类型数组

	bySend = System.Text.Encoding.Default.GetBytes 

         ( textBox2.Text  ) ;

	//按照指定编码类型把字符串指定到指定的Byte数组

	int i = stSend.Send  ( bySend ) ;

	//发送数据

	listBox1.Items.Add  ( textBox2.Text  ) ;

}


9.用下列代码替换Form1.cs中“清理所有正在使用的资源。”对应的代码。其作用是在程序退出之前,判断连接状态,如果没有退出,则向远程主机发送控制码“STOP”,用以断开和远程主机的连接,并清除相应资源。所谓控制码就是网络应用程序之间彼此交换信息的一种自定义码子,应用程序通过接收、发送这些码子,可以明确网络应用程序的行为,保证执行的一致性,也就少了很多出错的几率。控制码在编写远程控制方面的应用程序时使用比较多。之所以要有这一步是因为在用Visual C#编写网络应用程序的时候,很多人都遇到这样的情况。当程序退出后,通过Windows的“资源管理器”看到的是进程数目并没有减少。这是因为程序中使用的线程可能并没有有效退出。虽然Thread类中提供了“Abort”方法用以中止进程,但并不能够保证成功退出。因为进程中使用的某些资源并没有回收。可见在某些情况下,依靠Visual C#的垃圾回收器也不能保证完全的回收资源,这时就需要我们自己手动回收资源的。下面就是手动回收资源采用的一种方法:

protected override void Dispose (  bool disposing  )

{

	if  (  tcpConnect  )

	{

		Byte [ ] bySend = new byte [ 4 ] ;

		//根据字符串“STOP”长度来定义Byte数组

		bySend = System.Text.Encoding.

                  Default.GetBytes ( "STOP" ) ;

		int i = stSend.Send  ( bySend ) ;

		//发送控制码

		stSend.Close ( ) ;

		//关闭套接字

	}

	if (  disposing  )

	{

		if  ( components != null ) 

		{

			components.Dispose ( ) ;

		}

	}

	base.Dispose (  disposing  ) ;

}


至此在上述步骤都正确执行后,【利用Socket来传送数据】就全部完成了。
收藏此文  |  打印  

 
  • 上一篇教程:

  • 下一篇教程:

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

  •   最近更新

      GoogLe

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