1.socket类
根据前一篇博客《理解网络编程》所述,面向网络编程需要获取套接字(socket)信息;c#中socket类为网络通信提供了一套丰富的方法和属性,下图展示了TCP客户端与服务端建立通信的连接过程。相关编程思路将以此展开。

2.TCP服务端
2.1.socket()
Socket (AddressFamily,SocketType, ProtocolType);使用指定的地址族、套接字类型和协议初始化Socket类的新实例。
针对TCP服务端:
Socket ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//IP 版本 4 的地址;支持可靠、双向、基于连接的字节流、而不重复数据,也不保留边界;传输控制协议。
2.2.bind()
public void Bind (EndPoint localEP);
2.2.1.IPEndPoint 类
将网络端点表示为 IP 地址和端口号;
构建IPEndPoint对象需要先获取网络IP与端口,C#可以采用多种方式获取网络IP
IPAddress类
构造函数
IPAddress (Byte[])例如:IPAddress ip =new IPAddress(new byte[] { 127, 0, 0, 1 });
IPAddress (Int64)例如:IPAddress ip =new IPAddress(0x2414188f);IP:143.24.20.36
主要属性
AddressFamily:获取 IP 地址的地址族。
例如:AddressFamily.InterNetwork获取ipv4
主要方法
Parse(String):IP 地址将字符串转换为IPAddress实例。
例如:IPAddress ip =IPAddress.Parse("127.0.0.1");
ToString():将 Internet 地址转换为其标准表示法。(overloadObject.ToString()。)
TryParse(String, IPAddress):确定字符串是否为有效 IP 地址。
例如:
IPAddress ipAddress;
if (IPAddress.TryParse(IP地址, out ipAddress))
{
MessageBox.Show(string.Format("有效{0}", ipAddress));
}
else
{
MessageBox.Show("无效");
}
Dns类
(1)GetHostAddresses方法
返回指定主机的Internet协议(IP)地址。
语法:
public static IPAddress[] GetHostAddresses (string hostNameOrAddress)
参数:
hostNameOrAddress:要解析的主机名或IP地址。
返回值:一个IPAddress类型的数组,该类型保存由hostNameOrAddress参数指定的主机的IP地址。
(2)GetHostByAddress方法
获取IP地址的DNS主机信息(以发生成重载),重载方法为为Dns.GetHostByAddress (IPAddress)和Dns.GetHostByAddress (String),下面分别进行介绍。
lDns.GetHostByAddress (IPAddress)
根据指定的IPAddress创建IPHostEntry实例。
语法:
public static IPHostEntry GetHostByAddress(IPAddress address)
参数:
address:一个IPAddress。
返回值:一个IPHostEntry。
lDns.GetHostByAddress (String)
根据IP地址创建IPHostEntry实例。
语法:
public static IPHostEntry GetHostByAddress(string address)
参数:
address:IP地址。
返回值:一个IPHostEntry实例。
(3)GetHostName方法
获取本地计算机的主机名。
语法:
public static string GetHostName ()
返回值:包含本地计算机的DNS主机名的字符串。
(4)Resolve方法
将DNS主机名或IP地址解析为IPHostEntry实例。
语法:
public static IPHostEntry Resolve(string hostName)
参数:
hostName:DNS样式的主机名或IP地址。
返回值:一个IPHostEntry实例,包含有关hostName中指定的主机的地址信息。
bind()实现:
IPAddress[] iPs = Dns.GetHostAddresses("");//返回指定主机的Internet协议(IP)地址。
foreach (IPAddress ipAdress in iPs)
{
if (ipAdress.AddressFamily == AddressFamily.InterNetwork)//获取ipv4
{
IpAddress = ipAdress;
}
}
IPEndPoint localEP= new IPEndPoint(ipAdress, ServerPort);
ServerSocket.Bind(localEP);
2.3.listen()
public void Listen (int backlog)
Listen可以让一个面向连接的Socket侦听传入的连接尝试。backlog参数指定队列中最多可容纳的等待接受的传入连接数。若要确定可指定的最大连接数,请检索MaxConnections值。Listen不会阻止。
代码实现:
// create the socketSocket listen
Socket =new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// bind the listening socket to the port
IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
IPEndPoint ep =new IPEndPoint(hostIP, port);
listenSocket.Bind(ep);
// start listening
listenSocket.Listen(backlog);