庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>C#语言>网络编程>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

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

 作者:本站收集   日期:2005-8-8 9:58:55
字号选择〖 〗/ 双击滚屏 单击停止   
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来传送数据】就全部完成了。
上一篇:Visual C#中托管Socket的实现方法(二) (1)    下一篇:Visual C#托管Socket的实现方法(一) (2)  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-8-8 9:58:55
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿