美文网首页
C# udp 广播屏幕

C# udp 广播屏幕

作者: min_dou | 来源:发表于2019-04-18 11:38 被阅读0次

    需求电脑端桌面需要投屏到其他设备可能是电脑或者手机端,相反电脑端也要接收其他设备投屏过来的,这样就要做客户端和服务端 两个项目 来调试运行

    需求明确搜集相关技术资料, 主要涉及到的有socket  udpClient ,windows 截屏,图片压缩

    (一)点对点传输方式

    使用socket  实现点对点发送基于tcp 传输方式。

    服务端

    创建socket套接字

    开启线程循环发送图片

     socket有sendTo ()  和send()方法,

       send ();是指定的EndPoint 的终结点 , 因为 已经有Connect()方法已经连接到的终结点了ip   有了指定的发送地址所以此处调用了send();

    sendTo() 使用UDP进行通信时,不需要连接。因为异地的主机之间没有建立连接,所以UDP不能使用标准的Send()和Receive()套接字方法,而是使用两个其他的方法:SendTo(byte[] data , EndPoint Remote) ,SendTo()方法指定要发送的数据,和目标机器的IPEndPoint .

    recive() 方法和reciveFrom  和send  的方法用法相似。

    发送图片

    服务端实现思路就这样,截屏和处理图片略 网上一大堆

    客户端

    创建socket  连接 调用

    IPAddress ip = IPAddress.Parse(host);

    IPEndPoint ipe = new IPEndPoint(ip, port);

     ep = iep as EndPoint;

     Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类

     s.Bind(ipe); // 绑定远程电脑发过来终结点

     s.Listen(10); Socket temp = s.Accept();   //socket   监听

    创建线程略

    执行读取方法 注意 ,如果有数据丢失 ,修改缓冲区大小,

    广播模式, 一对多屏幕传输, ,

    服务端 (广播)

     socket  广播

     socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Broadcast,1);

    广播消息的目的IP地址是一种特殊IP地址,称为广播地址。 广播地址由IP地址网络前缀加上全1主机后缀组成,如:192.168.1.255是192.169.1.0这个网络的广播地址;130.168.255.255是130.168.0.0这个网络的广播地址。向全部为1的IP地址(255.255.255.255)发送消息的话,那么理论上全世界所有的联网的计算机都能收得到了。但实际上不是这样的,一般路由器上设置抛弃这样的包,只在本地网内广播,所以效果和向本地网的广播地址发送消息是一样的。 通常EndPoint Remote = new IPEndPoint(IPAddress.Broadcast,9050)

    /*

     sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

    IPEndPoint  iep = new IPEndPoint(IPAddress.Broadcast, 9040);//初始化一个发送广播和指定端口的网络端口实例

     ep = iep as EndPoint;

    sock .SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); */

    udp 广播  设置简单, 只要配置好IP和IPEndPoint 

    newClient = new UdpClient(new IPEndPoint(IPAddress.Any, 0));

      remote = new IPEndPoint(IPAddress.Broadcast, 7788);

    设置完启用线程循环发送桌面截屏 的方法和点对点发送图片方法一样。

    客户端 实现简单如下,

    在调试过程中出现各种问题, 客户端接收截屏 一直显示是半行,图片其他都没有显示出来, 找了半天, 尝试各种办法, 看到有人说是缓冲区太小, udp包 传输 大小有限制, window 下默认8k。调整了发送截屏方法里的缓冲区大小。这样就显示出来。 侥幸对图片进行处理, 图片不会太大,要不就要分包来处理。

    屏幕传输网上还有一种方式 使用timer   定时的执行截屏方法, 这样行的通, 就是出来的屏幕不流畅 。

    由于项目需求简单,  就做的简单。初识socket和  udp   走了不少弯路。

    相关文章

      网友评论

          本文标题:C# udp 广播屏幕

          本文链接:https://www.haomeiwen.com/subject/wabbwqtx.html