winform网络编程之DNS类,IPAddress类和IPEndPoint类以及如何获取本地ip地址

课设要求做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];


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Winform中使用Socket实现屏幕共享,可以通过以下步骤实现自动获取IP端口: 1. 在Winform界面中添加一个按钮或其他触发屏幕共享操作的元素。 2. 在按钮的点击事件中,创建一个Socket对象,并通过Socket的Bind方法绑定一个本地IP地址和一个随机的可用端口号。 3. 调用Socket对象的Listen方法开始监听。 4. 通过Socket对象的LocalEndPoint属性获取绑定的本地IP端口号。 5. 将本地IP端口号显示在Winform界面中的相应文本框或标签中,使用户可以看到自动获取IP端口。 6. 创建一个新的线程,在该线程中实现屏幕捕获的功能。可以使用系统自带的屏幕捕获API或第三方库(如SharpDX或OpenCV)来实现屏幕截图。 7. 在屏幕捕获的线程中,使用Socket对象的Accept方法接收远程客户端的连接请求,并建立一个新的Socket连接。 8. 将屏幕截图转换为字节流,并通过新建立的Socket连接将字节流发送给远程客户端。 9. 在Winform界面中显示连接状态和传输信息,例如可以添加一个文本框或标签来显示连接状态和传输时的数据量等信息。 10. 当需要停止屏幕共享时,关闭Socket连接,并释放相关资源。 需要注意的是,在使用Socket进行网络通信时,需要处理异常情况,比如网络连接中断或传输失败等,并进行适当的错误处理和重试操作,保证程序的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值