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


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

Socket就是套接字,它是网络编程 中最常用遇到的概念和工具。在TCP/IP网络中,传送和接收数 据就会经常使用到Socket,由于使用Socket能够在网络 上处理复杂数据,所以在各种网络应用程序中,涉及到数据传送和接 收,一般都会使用Socket,可见要掌握网络编程,精通Soc ket是非常重要。由于Socket本身的复杂性,决定了掌握它 是比较困难的。Visual C#是微软公司推荐的开发.Net 平台应用程序的主要语言,随着.Net的深入人心,目前很多有远 见的公司都把以前的软件转向了.Net平台。掌握网络编程始终是 学习一种开发语言的重点,这一点对于Visual C#也同样如 此。Visual C#实现网络功能其关键也是掌握托管Sock et的使用方法。本文就来详细介绍Visual C#中利用托管 Socket实现网络数据传送和接收的实现方法及其注意事项。

一.简介Socket:

So cket诞生于上个世纪80年代初,美国政府的高级研究工程机构 (ARPA)给加利福尼亚大学伯克力(Berkeley)分校提 供了资金,委托他们在UNIX操作系统下实现TCP/IP协议的 开发接口。于是研发人员就为TCP/IP网络通信开发了一个AP I(应用程序接口)。这个API称为Socket接口(套接字) 。所以有时候说,Socket是TCP/IP上的API。
到了上个世纪90年代,当时的一些网络开发商,包括 现在地Sun和Microsoft公司等,共同制定了一套WIN DOWS下的网络编程接口,即WindowsSockets规范 ,简称WinSock规范。WinSock规范是一套开放的、支 持多种协议的Windows下的网络编程接口。从1991年的1 .0版到1995年的2.0.8版,经过不断完善并在Intel 、Microsoft、Sun等公司的大力支持下,已成为Win dows网络编程的事实上的标准。目前,WinSock规范主要 有1.1版和2.0版。两者的最重要区别是1.1版只支持TCP /IP协议,而2.0版可以支持多协议。2.0版有良好的向后兼 容性,任何使用1.1版的源代码,二进制文件,应用程序都可以不 加修改地在2.0规范下使用。

可见Socke t接口其实是TCP/IP网络的API接口函数,Socket数 据传输其实就是一种特殊的I/O。常用的Socket类型有两种 :流式Socket(SOCK_STREAM)和数据报式Soc ket(SOCK_DGRAM)。流式是一种面向连接的Sock et,针对于面向连接的TCP服务应用;数据报式Socket是 一种无连接的Socket,对应于无连接的UDP服务应用。 < br>
二.Visual C#中操作Socket: < br>
虽然Visual C#可以使用NetworkS tream来传送、接收数据,但NetworkStream在使 用中有很大的局限性,利用NetworkStream只能传送和 接收字符类型的数据,如果要传送的是一些复杂的数据如:二进制数 据等,它就显得能力有限了。但使用NetworkStream在 处理自身可操作数据时,的确要比Socket方便许多。Sock et(套接字)几乎可以处理任何在网络中需要传输的数据类型。

我们知道Visual C#和Visual C ++的区别之一,就是Visual C#没有属于自己的类库,而 Visual C++却是有的,Visual C#使用的类库是 .Net框架为所有开发.Net平台程序语言提供的一个公用的类 库——.Net FrameWork SDK。Visual C #主要网络功能主要使用.Net FrameWork SDK中 的提供的二个命名空间“System.Net.Sockets” 和“System.Net”。而实现Socket使用的是命名空 间“System.Net.Sockets”中的Socket类 。Visual C#通过创建Socket类的实例来实现Soc ket的托管版本。在Visual C#中创建完Socket实 例后,可以通过此Socket实例的Bind方法绑定到网络中指 定的终结点,也可以通过其Connect方法向指定的终结点建立 的连接。连接创建完毕,就可以使用其Send或SendTo方法 将数据发送到Socket;同样使用其的Receive或Rec eiveFrom方法从Socket中读取数据。在Socket 使用完毕后,请使用其的Shutdown方法禁用Socket, 并使用Close方法关闭Socket。表01和表02是Soc ket类中的常用属性和方法及其简要说明。

 

 

属性
说明


AddressFamily
获取Socket的地址族。


Av ailable
获取已经从网络接收且可供读取的数据量。


Bl ocking
获取或设置一个值,该值指示Socket是否处于阻塞模式。

Connected
获取一个值,该值指示Socket是否已连接 到远程资源。

Handle
获取Socket的操作系统句柄。


LocalEndPoint
获取本地终结点。


ProtocolType
获取Socket的协议类型。


R emoteEndPoint
获取远程终结点。

< br> SocketT ype
获取S ocket的类型。

 


表01:Socket类的常用属性及其说明

 

方法
说明


Ac cept
创建 新的Socket以处理传入的连接请求。


Beg inAccept
开始一个异步请求,以创建新的Socket来接受传入的连接 请求。


BeginConnect
开始对网络设备连接的异步请 求。


BeginReceive
开始从连接的Socket中异 步接收数据。

BeginReceiveFrom
开始从指定网 络设备中异步接收数据。


BeginSend 将数据异步发送到 连接的


BeginSendTo
向特定远程主机异步发送数据。


Bind
使Socket与一个本地终结点相关联。


Close
强制Socket连接关闭。

< br> Connect
建立到远程设 备的连接。


EndAccept
结束异步请求以创建新的Soc ket来接受传入的连接请求


EndConnec t
结束挂起的 异步连接请求。
< br>
EndReceive
结束挂起的异步读取。< br>

EndReceiveFrom
结束挂起的、从特定终结点进行异 步读取。


EndSend
结束挂起的异步发送


EndSendTo
结束挂起的、向指定位置进行的异步发送。


GetSocketOption
返回Socket选项的值。


IOControl
为Socket设置低级别操作模式


Lis ten
将So cket置于侦听状态。


Poll


Receive
接收来自连接Socket的数据。


Re ceiveFrom
接收数据文报并存储源终结点。


Selec t
确定一个或 多个套接字的状态。


Send
将数据发送到连接的


SendTo
将数据发送到特定终结点。

SetSocke tOption
设置Socket选项。


Shutdown 禁用某Socke t上的发送和接收。

 

 

表02:Socket类 的常用方法及其说明

其中“BeginAcce pt”和“EndAccept”、“BeginConnect” 和“EndConnect”、

“BeginR eceive”和“EndReceive”、“BeginRec eiveFrom”和“EndReceiveFrom”、
“BeginSend”和“EndSend”、“B eginSendTo”和“EndSendTo”是六组异步方法 ,

其功能分别相当于“Accept”、“Co nnect”、“Receive”、“ReceiveFrom” 、

“Send”和“SendTo”方法。 < br>
下面就通过一个具体的示例,来介绍Visual C#中如何通过托管Socket实现数据传送和接收的具体方法。

本文示例其实是由二部分组成,也可以看成是客 户机程序和服务器程序。客户机程序功能是通过

Socket向服务器程序创建连接,并在连接完成后,向服务器发 送数据;服务器程序通过侦听端口,接受网络的Socket的连接 请求,并在连接完成后,接收从客户机发送来的数据,并显示出来。 下面首先来介绍Visual C#通过托管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