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

 一.Visual C#中操作Socket:

虽然Visual C#可以使用NetworkStream来传送、接收数据,但NetworkStream在使用中有很大的局限性,利用NetworkStream只能传送和接收字符类型的数据,如果要传送的是一些复杂的数据如:二进制数据等,它就显得能力有限了。但使用NetworkStream在处理自身可操作数据时,的确要比Socket方便许多。Socket(套接字)几乎可以处理任何在网络中需要传输的数据类型。

我们知道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类的实例来实现Socket的托管版本。在Visual C#中创建完Socket实例后,可以通过此Socket实例的Bind方法绑定到网络中指定的终结点,也可以通过其Connect方法向指定的终结点建立的连接。连接创建完毕,就可以使用其Send或SendTo方法将数据发送到Socket;同样使用其的Receive或ReceiveFrom方法从Socket中读取数据。在Socket使用完毕后,请使用其的Shutdown方法禁用Socket,并使用Close方法关闭Socket。表01和表02是Socket类中的常用属性和方法及其简要说明。


属性
说明

AddressFamily
获取Socket的地址族。

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

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

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

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

LocalEndPoint
获取本地终结点。

ProtocolType
获取Socket的协议类型。

RemoteEndPoint
获取远程终结点。

SocketType
获取Socket的类型。

 

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


方法
说明

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

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

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

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

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

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

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

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

Close
强制Socket连接关闭。

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

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

EndConnect
结束挂起的异步连接请求。

EndReceive
结束挂起的异步读取。

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

EndSend
结束挂起的异步发送

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

GetSocketOption
返回Socket选项的值。

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

Listen
将Socket置于侦听状态。

Poll


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

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

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

Send
将数据发送到连接的

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

SetSocketOption
设置Socket选项。

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

 

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

其中“BeginAccept”和“EndAccept”、“BeginConnect”和“EndConnect”、

“BeginReceive”和“EndReceive”、“BeginReceiveFrom”和“EndReceiveFrom”、

“BeginSend”和“EndSend”、“BeginSendTo”和“EndSendTo”是六组异步方法,

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

“Send”和“SendTo”方法。

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

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

Socket向服务器程序创建连接,并在连接完成后,向服务器发送数据;服务器程序通过侦听端口,接受网络的Socket的连接请求,并在连接完成后,接收从客户机发送来的数据,并显示出来。下面首先来介绍Visual C#通过托管Socket实现客户机程序的具体方法。

Posted on 2010-12-20 10:14  Steven Sun  阅读(284)  评论(0编辑  收藏  举报