VisualC#2005中编写Socket网络程序

VisualC#2005中编写Socket网络程序,第1张

VisualC#2005中编写Socket网络程序,第2张

在网络环境中,我们最感兴趣的两个名字空是System.net和系统。net . Sockets System.Net空的命名通常与更高层的操作有关,比如下载或上传,使用HTTP等协议的Web请求等。,而类则包含在系统的命名中。Net.Sockets 空通常与底层操作有关。如果想直接使用Sockets或TCP/IP之类的协议,这个名为空的类非常有用。

英寸系统的命名空间。Net.Sockets 空为需要严格控制网络访问的开发人员提供了Windows Sockets (Winsock)接口的托管实现。System.Net空中的所有其他网络访问类都是建立在这个Socket套接字实现上的,比如TCPClient、TCPListener和UDPClient类,它们封装了关于创建到Internet的TCP和UDP连接的详细信息;NetworkStream类为网络访问等提供基本数据流。套接字可以在许多常见的互联网服务中找到,如Telnet、Http、Email、Echo等。虽然这些服务有不同的通信协议定义,但它们的基本传输是套接字。

实际上,Socket可以看作是一个类似Stream的数据通道。在应用程序(客户端)和远程服务器之间建立该通道,然后,针对该通道执行数据读取(接收)和写入(发送)。

可以看出,在应用端或服务器端创建Socket对象后,可以使用Send/SentTo方法向连接的Socket发送数据,或者使用Receive/ReceiveFrom方法从连接的Socket接收数据。

对于套接字编程,将调用。NET framework是Winsock32 API提供的socket服务的托管代码版本。其中,提供了许多实现网络编程的方法。在大多数情况下,套接字类方法只是将数据发送到它们的本机Win32副本,并处理任何必要的安全检查。如果你熟悉Winsock API函数,用Socket类编写网络程序会非常容易。当然,如果你没接触过,也不会太难。按照下面的解释,你会发现用Socket类开发windows网络应用是有一些规则的,在大多数情况下遵循大致相同的步骤。

在使用之前,需要先创建一个Socket对象的实例,这可以通过Socket类的构造方法来实现:

公共套接字(AddressFamily addressFamily,SocketType socketType,protocol type protocol type);

addressFamily参数指定套接字使用的寻址方案,SocketType参数指定套接字的类型,protocolType参数指定套接字使用的协议。

以下示例语句创建了一个套接字,可用于在基于TCP/IP的网络(如Internet)上进行通信。

套接字温度=新套接字(地址族。互联网,SocketType。流,协议类型。TCP);

要使用UDP而不是TCP,您需要更改协议类型,如下例所示:

套接字温度=新套接字(地址族。互联网,SocketType。协议类型。UDP);

一旦创建了Socket,在客户端,你就可以通过Connect方法连接到指定的服务器,通过Send/SendTo方法向远程服务器发送数据,然后就可以通过Receive/ReceiveFrom从服务器端接收数据;在服务器端,需要用Bind方法绑定指定的接口,将套接字与本地端点连接起来,通过Listen方法监听接口上的请求。当听到客户端的连接时,调用Accept来完成连接操作,并创建一个新的套接字来处理传入的连接请求。使用完套接字后,记得使用Shutdown方法禁用套接字,使用Close方法关闭套接字。

可以看出,上面的许多方法都包含端点类型的参数。在互联网中,TCP/IP使用网络地址和服务端口号来识别设备。网络地址标识网络上的特定设备;标识此设备上您要连接的特定服务。网络地址和服务端口的组合称为端点。在。NET framework中,此端点由endpoint类表示,它提供了网络资源或服务的抽象,以标记网络地址等信息。。Net还为每个支持的地址族定义了端点的子节点;对于IP地址系列,此类是IPEndPoint。IPEndPoint类包含应用程序连接到主机上的服务所需的主机和端口信息。通过组合服务的主机IP地址和端口号,IPEndPoint类形成了服务的连接点。

使用IPEndPoint类时,不可避免地涉及到计算机的IP地址。System.Net命名空间空中有两种IP地址示例:

IPAddress类:IPAddress类包含计算机在IP网络上的地址。Parse方法可以将IPAddress字符串转换为IP地址实例。以下语句创建IPAddress的一个实例:

IPAddress myIP = IPAddress。parse(" 192 . 168 . 0 . 1 ");
Dns类别:为使用TCP/IP Internet服务的应用程序提供域名服务。它的Resolve方法查询DNS服务器,将用户友好的域名(如“host.mydomain.com”)映射到数字互联网地址(如192.168.0.1)。Resolve方法返回IPHostEnty的一个实例,该实例包含所请求名称的地址和别名列表。在大多数情况下,可以使用AddressList数组中返回的第一个地址。下面的代码获取一个包含服务器host.mydomain.com的IP地址的IPAddress实例。

IPHostEntry ipHostInfo = Dns。resolve(" host . my domain . com ");
IP address IP address = ipHostInfo。地址列表[0];

您还可以使用GetHostName方法来获取IPHostEntry的实例:

IPHosntEntry hostInfo = Dns。GetHostByName(" host . my domain . com ")

使用上述方法时,您可能需要处理以下异常:

SocketException:访问套接字时操作系统出错。

ArgumentNullException异常:参数为空,通过引用抛出。

ObjectDisposedException异常:套接字已被关闭并引发。

掌握上述知识后,下面的代码将服务器主机(host.mydomain.com)的IP地址与端口号结合起来,为连接创建一个远程端点:

IPEndPoint ipe = new IPEndPoint(IP address,11000);

确定远程设备的地址并选择用于连接的端口后,应用程序可以尝试与远程设备建立连接。以下示例使用现有的IPEndPoint实例连接到远程设备并捕获可能的异常:

try
{
temp。连接(ipe);//尝试连接
}
//处理参数为空引用异常
Catch(argumentnullException AE)
{
console . writeline(" argumentnullException:{
}
/Handle操作系统异常
Catch(socket exception SE)
{
console . writeline(" socket exception:{ 0 } ",SE . tostring());
}

你需要知道的是:Socket类支持两种基本模式:同步和异步。不同之处在于,在同步模式下,对执行网络操作(如发送和接收)的函数的调用要等到操作完成后,才会将控制权返回给调用程序。在异步模式下,这些调用会立即返回。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » VisualC#2005中编写Socket网络程序

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情