winform网络编程(一)
课设要求做windows下的socket通信编程,没有办法,恶补吧。一向不喜欢网络编程的我只能慢慢来,说实话不是不喜欢,是怕麻烦。
计算机有那么多层的结构,每层又有那么多协议,明白每个协议的内容和作用,对通信的流程有很清晰的了解,对传输的数据明白怎样进行解析,明白怎样唯一确定到网络中的某个特定的计算机,怎样解析DNS等等,特别是最烦网络这一层,什么ip,dns,socket,tcp,http,udp等等真的是傻傻分不清楚。、
其他先不谈,只能先说C#下的网络编程了。
1.明确什么是端口port:想想计算机为什么能对外传输数据,对内接受数据的?很简单一个不太恰当的比方,一个水库,能蓄水能排水,水是怎么进去又是怎么出来的呢,肯定是通过水库的闸门了,ok,那个闸门就是我理解的端口。
不恰当的地方是,不能形容一个端口可以被不同的程序占用,但不能同时占用。
2.明确什么是套接字Socket:只要牢记Socket介于应用程序和Port之间,用于将应用程序与端口连接起来。
3.DNS类
(1)常用方法:
GetHostAddresses 返回指定主机的Internet协议(ip)地址族
GetHostEntry 将主机名或IP地址解析为IPHostEntry实例
GetHostName 获取本地计算机的主机名,与GetHostByName有联系
GetHostByAddress 获取IP地址的DNS主机信息
GetHostByName 获取指定DNS主机名的DNS信息,与GetHostName有联系
(2)实例代码:
string hostName = Dns.GetHostName();//获取本机名 string dnsInfo = Dns.GetHostByName(Dns.GetHostName()).HostName;//根据指定的主机名获取DNS信息
4.IPAddress类
(1)重要的字段,属性和方法:
Any字段 提供一个IP地址,指示服务器应侦听所有网路接口上的客户端活动,只读
Address属性 IP地址
AddressFamily属性 IP地址的地址族
Parse方法 将IP地址字符串转换为IPAdress实例(这个很常用)
(2)实例代码:
IPAddress[] ips = Dns.GetHostAddresses(这边是你的ip地址);//获取指定主机的IP地址族 foreach(IPAddress ip in ips)//循环遍历得到IP地址 { string ipAddress = ip.ToString();//ipAddress即是ip地址的字符串 } IPAddress ipaddress = IPAddress.Parse(这边是IP地址字符串);
3.IPEndPoint类
说白了,我的理解,这个类就相当于一个包装器,组合器。通过组合服务的主机IP地址和端口号,形成到服务的连接点。
(1)常用的字段,属性:
Address属性 获取或设置终结点的IP地址
AddressFamily属性 获取IP地址族
Port属性 获取或设置终结点的端口号
(2)实例代码:
//创建IPEndPoint对象,当然你可以直接new IPEndPoint(IPAddress类型的ip地址,8888) IPEndPoint IPEPoint = new IPEndPoint(IPAddress.Prase(IP地址字符串),8888) //获取它的IP地址 IPAddress ipAddress = IPEPoint.Address //获取它的端口号 int port = IPEPoint.Port
综上所述:
总结了两种获得本地ip地址的方式:
1.
IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName()); foreach(IPAddress ip in ips) { IPAddress ipa = ip.Address }
当然这是一个foreach循环,里面不会那么写,那样写就覆盖掉之前的了,这边一般是把结果转换成string类型显示在前台的某个label里面或者textbox里面。我这边只是一个例子罢了,莫较真。
2.IPHostEntry:为Internet主机地址信息提供容器的类,你看做容器就行了。
当然也可以充分利用DNS类的GetHostEntry这个方法,原理类似
IPHostEntry ipEntry = Dns.GetHostByName(Dns.GetHostName()); IPAddress ip = ipEntry.AddressList[0];