域名频道-专业提供域名注册,网站空间,电子邮箱,VPS主机等服务
首页 域名注册 虚拟主机 香港主机 美国主机 VPS主机 网站建设 ShopEX网店 软件开发 客户中心 购物车
域名服务,域名注册 常见问题
文章搜索


本类TOP10
·松江网页设计_松江网页制...
·上海轨道交通图-上海地图
·松江公交线路图-松江地图
·marquee连续滚动
·今天几度?-天气预报-全...
·松江新城地图-松江地图
·松江城区地图-松江地图
·HAO123邮箱登陆代码
·shopex免费模板,下...
·松江DNS服务器地址,松...
当前位置:域名频道首页 > 常见问题 > 网页制作
Visual C#托管Socket的实现方法(一) (3)

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

 

int port = 8000 ;

//定义侦听端口号
private TcpClient tcpc ;

/ /对服务器端创建TCP连接
private Socke t stSend ;

//创建发送数据套接字
private bool tcpConnect = fals e ;

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

 

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

 


privat e void button1_Click
( obj ect sender , System.EventArgs e )
{
//以下代码是判断是否和远程终结点 成功连接
try
{
stSend = new Socket ( AddressFamily. InterNetwork ,
SocketType.Stream , Pro tocolType.Tcp ) ;

//初始化一个 Socket实例
IPEndPoint tempR emoteIP = new IPEndPoint
( IPAddress.P arse ( textBox1.Text ) , port ) ;

//根据IP地址和端口号创建远程终结点 EndPoint epTemp = ( EndPo int ) tempRemoteIP ;

stSe nd.Connect ( epTemp ) ;

/ /连接远程主机的8000端口号
statusBar 1.Text = "
成功连接远程计算机!" ;
;

tcpConnect = true ;
button1.Enabled = false ;

button2.Enabled = true ;

}
catch ( Exception )
{
statusBar1.Text = "
目标计算机拒绝连接请求!"
;

}
}

 


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

 

private void button2_Click
( objec t sender , System.EventArgs e )
{
int iLength = textB ox2.Text.Length ;

//获取要发送的 数据的长度
Byte [ ] bySend = ne w byte [ iLength ] ;

//根据获 取的长度定义一个Byte类型数组
bySend = System.Text.Encoding.Default.G etBytes
( textBox 2.Text ) ;

//按照指定编码类型把字符串 指定到指定的Byte数组
int i = stSen d.Send ( bySend ) ;

//发送数 据
listBox1.Items.Add ( te xtBox2.Text ) ;

}
< br>


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

 


protected override void Dispose ( bool disposin g )
{
if ( tcpConnec t )
{
Byte [ ] bySen d = new byte [ 4 ] ;

//根据 字符串“STOP”长度来定义Byte数组
bySe nd = System.Text.Encoding.
Default.GetB ytes ( "
STOP"
) ;

int i = stSend.Send ( bySe nd ) ;

//发送控制码
stSen d.Close ( ) ;

//关闭套接字
}
if ( disposing )
{
if ( components != nul l )
{
components.D ispose ( ) ;

}
}
base.Dispose ( disposing ) ;

}

 


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

 

来自:域名频道 时间:2006-9-19 返回 常见问题 首页
关于我们 联系方式 付款事宜 招聘启事 网站地图 域名注册 虚拟主机 法律顾问

Copyright 2000-2013 域名频道(www.DNS110.com)
地址:上海市松江区新松江路1188弄37号 邮编:201620
电话:021-67820741 67820742 67820743 传真:转分机805 值班电话:021-67820743
QQ:219854 Email:support@dns110.com