Welcome

首页 / 软件开发 / C# / socket编程学习笔记(2), C#网络编程概念性介绍

socket编程学习笔记(2), C#网络编程概念性介绍2011-03-12 cnblogs codeoneC#网络编程实际就是对WinSock进行了进一步的包装。

1. IPAddress,IPEndPoint, SocketAddress类

IPAddress就是一个IP 地址类, IPEndPoint就是IPAddress+Port,对应的就是sockaddr_in这个struct. SocketAddress类可以存储IPEndPoint类序列化以后的信息。

1.1 这两个类常用和注意的一些地方:¼

1) IPAddress ip = IPAddress.Parse("192.168.123.1");

2) IPAddress.Any is 0.0.0.0, 这个用在当系统中有多个网络接口,而用户不想把套接字绑定在任何接口上的时候。

3) IPAddress.None is 255.255.255.255, 它经常用来创建一个伪套接字。

4) 得到本机IP地址的一个方法: Dns.GetHostByName(Dns.GetHostName()).AddressList[0]

2, C#中的套接字类System.Net.Sockets.Socket

public Socket(
AddressFamily addressFamily,
SocketType socketType,
ProtocolType protocolType
);

在上面的构造函数中,SocketType与ProtocolType要自己对应。对应关系如下:

Dgram(UDP) 无连接通信

Stream (TCP) 面向连接的通信

Raw (ICMP) ICMP协议

Raw (Raw) 简单IP包

Socket t = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );

2.1 套接字Socket类常用属性和函数

Blocking 用来设置socket是否堵塞

Connected 指示 Socket 是否已连接到远程主机. 即使 Connected 返回 true,也无法保证 Socket 仍处于 Connected 状态。true 值仅意味着在上次 I/O 操作时 Socket 处于连接状态.

SetSocketOption()方法,将指定的 Socket 选项设置为指定值,看起来就是设置协议包头的一些值。(选项太多,看看MSDN,用google查查,可以找到很多例子)

其他的方法,例如bind(),listen(),send(),receive()和WinSocket本质都一样。(略)

2.2 Socket异常, SocketException

2.3为了简化Socket操作,C#提供了3个套接字助手:

TcpClient, TcpListener, UdpClient