首页 > 代码库 > winform网络编程(一)

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