网络编程序列2——C#TCP服务端代码实现一

来源:互联网 发布:数据爆炸时代 编辑:程序博客网 时间:2024/06/14 03:33

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

IPAddress (Byte[], Int64)不常用;

主要属性

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);

0 0
原创粉丝点击