99国产欧美另娄久久久精品_国内自拍农村少妇在线观看_久久亚洲道色宗和久久_日本aⅴ大伊香蕉精品视频_亚洲国产欧美日韩欧美特级_日本视频免费在线观看

  • 您的位置:首頁 > 新聞動態 > 技術文章

    HOLOLENS的SOCKET網絡通訊1

    2019/5/23??????點擊:
    多數開發者開發Hololens的通信功能是先想到的是system.net.socket庫里的socket,發布UWP的時候就可能出問題,因為UWP對system庫不是完全的支持,很多方法或者類是沒有定義的(這是一個很常見的發布UWP的報錯)。本文用的system.net.socket里的SAEA系列,全稱:SocketAsyncEvnetArgs,這是微軟針對高并發而設計的一套API, SAEA是異步的socket參數,使用SAEA時需要注意三點:1.緩沖區  2.IP  3.完成后的回調,這三點是必要的,其次還有其他的SAEA參數,不是必要的,例如UserToken等,詳細可查API。
    using UnityEngine;
    using System.Net;
    using System.Net.Sockets;
    using System;
    using System.Text;
    //這個腳本是hololens端的SocketUDP腳本,提供發送方法,初始化并開啟接收方法
    public class MyUdpClient : MonoBehaviour
    {
        Socket socket; //目標socket
        //發送端口
        EndPoint serverEnd; 
        IPEndPoint ipEnd; 
        //接收端口
        IPEndPoint IPLocalPoint;
        //發送用的socket異步參數
        SocketAsyncEventArgs socketAsyceArgs;
        //接收用的socket異步參數
        SocketAsyncEventArgs reciveArgs;
        //接收SAEA用來接收的緩沖區
        byte[] reciveArgsBuffer;        
        //初始化
        void InitSocket()
        {
            //定義連接的服務器ip和端口,可以是本機ip,局域網,互聯網
            ipEnd = new IPEndPoint(IPAddress.Parse("10.100.172.226"), 8001);
            //初始化要接收的IP,IPAddress.Any表示接收所有IP地址發來的字節流
            IPLocalPoint = new IPEndPoint(IPAddress.Any, 8002);
            //初始化socket
            socket = new Socket(IPLocalPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp);  
            //定義服務端
            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
            serverEnd = (EndPoint)sender;
            //初始化發送用的SAEA
            socketAsyceArgs = new SocketAsyncEventArgs();
            //設置發送用的SAEA的IP
            socketAsyceArgs.RemoteEndPoint = ipEnd;
            //初始化接收用的SAEA的緩沖區,此處我設為10K
            reciveArgsBuffer = new byte[1024 * 10];
            //初始化接收SAEA
            reciveArgs = new SocketAsyncEventArgs();
            //設置接收SAEA的接收IP地址
            reciveArgs.RemoteEndPoint = IPLocalPoint;
            //因為SAEA系列API 是異步方法,所以設置好完成方法后的回調
            reciveArgs.Completed += new EventHandler(CompletedRecive);
            //設置接收緩沖區
            reciveArgs.SetBuffer(reciveArgsBuffer, 0, reciveArgsBuffer.Length);
        }
        //異步方法完成后的complete時間
        private void CompletedRecive(object sender, SocketAsyncEventArgs e)
        {
            //通過SAEA.LastOperation這個枚舉來判斷完成的是什么方法,對應不同的操作
            switch (reciveArgs.LastOperation)
            {
                //因為reciveArgs是我專門用來接收的SAEA,所以這里只設置一個完成接收后用的方法
                case SocketAsyncOperation.ReceiveFrom:
                    PocessReceiveFrom(e);
                    break;       
            }
        }
        //中轉緩沖區,將數據拷貝出來給主線程用
        byte[] tempBytes;
        //用來通知主線程的參數
        bool isOk=false;
        //注意:處理這個方法是輔線程,不要用Unity的類,否則報錯,將收到的字節流拷貝出來,通知主線程來處理
        //接收完成后對應的處理方法
        public void PocessReceiveFrom(SocketAsyncEventArgs e)
        {
            if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success)
            {
                //這里會造成內存垃圾以及內存碎片化,如果頻繁的長時間的接收,建議做一個Byte池。
                tempBytes = new byte[e.BytesTransferred];     //將數據拷貝出來保證可以復用
                Array.Copy(e.Buffer, e.Offset, tempBytes, 0, tempBytes.Length);
                //通知主線程
                isOk = true;
            }
        }
        ////// 異步發送消息方法
        //////public void AsyncSend(byte[] bytes)
        {
            //設置緩沖區,緩沖區里是發送的字節流
            socketAsyceArgs.SetBuffer(bytes, 0, bytes.Length);
            //Debug.Log("socket異步參數字節流長度 " + socketAsyceArgs.Buffer.Length);
            bool bo = socket.SendToAsync(socketAsyceArgs);
            if (!bo)
            {
                //在hololens上發現過一段時間scoket就不會發送數據,*后這樣處理:判斷SentToAsync方法失敗后,就重新new一個SAEA,解決socket發送失敗的問題
                //注意初始化一個SAEA時,1.IP    2.緩沖區,3.完成后的回調事件  這三個都是必要的,
                socketAsyceArgs = new SocketAsyncEventArgs();
                socketAsyceArgs.RemoteEndPoint = ipEnd;
            }
        }
        //初始化socket并測試一下
        private void Start()
        {
            InitSocket();
            TestSocekt();
        }
        //用來測試socket的方法,發送一個信息
        void TestSocekt() {
            int tempInt = 9999;
            byte[] tempBytes;
     
            tempBytes=BitConverter.GetBytes(tempInt);
            AsyncSend(tempBytes);
        }
        private void Update()
        {
            if (isOk)
            {
                //對tempBytes進行處理
                int temp= BitConverter.ToInt32(tempBytes, 0);
                Debug.Log("接收socket,接收到了字節流,接收到的數字為 " + temp);
                isOk = false;
            }
        }
        //每隔一段時間就接受一下
        private void FixedUpdate()
        {
            socket.ReceiveFromAsync(reciveArgs);
        }
    }
    上面的代碼把接收模塊和發送模塊寫在一起,SAEA系列是異步的,所以使用起來對于多線程需要一些了解。
    一般的socket需求用上面的代碼足夠用的,由于上文中只有一個接收SAEA和一個發送SAEA,所以當一個SAEA在工作時,不要再讓這個SAEA工作。

    捷徑:后來發現在MixedRealTooklit里面有scoket組件,可以直接使用MRTK中Sharing文件夾中的組件,或者查看MRTK的源碼,里面是用Windows.Networking和Task寫的Socket,找了很長時間的SocketAPI,原來遠在天邊近在眼前,感嘆當時怎么不好好看看MRTK!!

    主站蜘蛛池模板: 亚洲精品成a人在线_成人在线免费观看视频网站_久久不见久久见www免费视频_99在线观看_在线高清理伦片a_久久精品看_成人精品区_天堂av性爱在线 | 久久人人爽天天玩人人妻精品_专干日本老妇HD_国产精品xxx视频_黄色片免费_国产精品一区二区福利视频_免费精品一区二区三区第35_国产精品色吧国产精品_老美黑人狂躁亚洲女 | 97成人在线免费视频_草久视频_午夜视频在线看_精品自拍一区_午夜性大片_高清成人爽a毛片免费_午夜三区_成人午夜精品视频 | 天天综合网7799精品视频_国产乱人伦偷精品视频_一精品久久久_辽宁人妻Chinese_99精品在线看_日本久久精品一区_国产素人在线观看_京香一区二区三区 | 精品久久久久久中文字幕2017_免费在线看黄色_91福利网站在线观看_日日爽天天_日韩一区精品_国产超碰人人爽人人做AV_色呦呦久久久_中日韩一级片 | 中国黄色a级_午夜剧场韩_国产av刺激无码_视频二区不卡_美女裸体爆乳免费网站_亚洲国产精品女人久久久_亚洲五月丁香综合视频_小泽玛利亚一区二区在线观看 | 久久精品国内_亚洲欧美国产国产综合一区_亚洲精品mv在线观看_亚洲高清自拍_国产激情二区_亚洲VA在线VA天堂VA欧美VA_色久综合一二码_日韩aaaaaaa | 香港一级毛片_国产成人亚洲综合图区_日本XXXX色视频在线观看_99er热精品视频_永久av在线_超级色观看在线_五月丁香六月综合AV_国产精品人妻无码久久青草 | 欧美成人久久_精品国产AⅤ一区二区三区桃_无码欧亚熟妇人妻AV在线外遇_俺去啦久久草在线视频_延禧攻略在线_久久久久久久99精品免费观看_天堂久久久久VA久久久久_亚洲精品欧美视频 | 国产精品草草在线观看_国产成人亚洲影院在线播放_亚洲一二三四区不卡_黄频视频在线观看_性欧美极品另类_免费在线看一区_人妻无码精品久久亚瑟影视_息与子五十路中文字幕 | 337P大胆日本欧美人体艺术噜噜噜_国产精品无码翘臀在线看_国产农村妇女毛片精品久久久_西西人体大胆午夜啪啪_91麻豆精品在线_亚洲一区网站_www.gogo38西西人体_日韩第六页 | 里番精品3d一二三区_日本草逼_亚洲AV无码专区日韩乱码_日韩视频中文字幕精品偷拍_日韩精品亚洲一区_91国内精品白嫩初高生_中文字幕免费久久_99久久久久久久 | 欧美又大又粗又硬又色A片_欧美成人家庭影院_在线观看一级黄色片_午夜视频在线观看一区二区_久久久久久久久久久成人_东京热亚洲精品中文一区_成人特级毛片69免费观看_三级在线观看网站 | 九色精品91_性做久久久久免费观看_日韩精品123区_国产精品久久9_国产精品色拉拉_国产精品wwwcom976con_亚洲高清资源在线观看_九一精品视频一区二区三区 | 日本高清网色_日本高清免费一本在线观看_日本高清久久久_精品久久久久久_91女神在线视频_国产青青_国产高清一级毛片在线不卡_色中文字幕在线 | 国产成人在线看_超级碰碰青草免费视频_亚洲欧美成人中文字幕在线_毛片免费视频播放_亚洲手机在线播放_特黄aaaaaaaaa毛片免_超黄毛片_9999亚洲 | 密色影院_成人国产精品久久久春色_国产a一区二区_久久免费看_美女光胸无遮挡18禁止观看_日韩在线一级片_欧美日韩精品欧美日韩精品一_成人欧美在线 | 麻豆视频污_欧美黑人巨大精品VIDEOS_久久久精品一区二区毛片免费看_日本黄色高清片_亚洲有吗在线观看_A级日本乱理伦片免费入口_蜜桃av资源_国产ts一区 | 成人做爰69片免网站_女人高潮潮叫免费视频_97色se_中日韩在线观看_午夜熟女插插XX免费视频_女人被添全过程A片久久AV_国产精品精品国产_国产毛片在线 | 欧美国产日韩在线_日韩黄色a_www.草草草_日韩欧美一级视频_久久99热这里只频精品6_国产精品入口福利_中文字幕在线观看第三页_久久成人影院精品99 | 久久一日本道色综合久久_国产日韩精品SUV_a级黄色录像片_久久久久亚洲精品乱码按摩_国产jizzz_亚洲乱码一区二区三区四区_日韩一区二区三免费高清在线观看_好硬啊进得太深了A片无码公司 | 日韩在线观看中文字幕_99青娱乐_日韩黄色_a级毛片黄免费a级毛片_欧美激情插插插_色情无码初拍人妻_91狠狠综合_亚洲四区在线 | 国产黄色视频白丝_免费黄色一级_欧美a级在线观看_成年网站免费_国产极品在线视频_国产91九色在线播放_蜜臀久久蜜臀av国内精品久久久_久久久麻豆精品一区二区 | 日韩欧美国产1_护士巨好爽好大乳_伊人第四色_国产精品1页_国色天香综合网_黄色在线免费播放_7777精品伊人久久久大香线蕉_1—42集免费观看 | 国产网站久久_超碰99热_国产痴女资源在线不卡_欧美偷拍另类_av不卡免费_艹逼视频免费观看_国产精品一区二区三区成人_亚洲成年人在线 | 12av视频_性视频毛片_国产精品无码dvd在线观看_欧美人体一区二区视频_人人干夜夜_国产超碰无码最新上传_国产日韩一区二区_精品AV无码国产一区二区 | 一区视频免费观看_天干夜天天夜天干天2004年_欧美性猛交视频_女18一级大黄毛片免费女人_欧美日产一区_免费国产视频在线观看_一区二区三区中文字幕在线_麻豆视频网站 | 国产精品www_欧美久草_国产欧美亚洲精品第三页_在线无码成本人视频动漫_国产日韩精品综合网站_国产亚洲精品91在线_中文字幕av免费观看_亚洲性视屏 | 97亚色_青草综合一区二区三区_国产二区视频在线播放_黄色一区二区在线观看_美女黄色一级视频_日本黄色免费片_曰本丰满熟妇XXXX性_精品国产成人av | 亚洲精品午夜久久久_综合一区在线_99高清免费国产自产拍_亚洲一区二区三区乱码_国产精品久久久久国产精品_在线观看91精品国产入口_日本特黄视频_中国一级视频 | 亚洲乱码中文字幕综合区_亚洲国产另类久久久精品网站_久久久国产精华液999999_深夜视频国产_亚洲精品毛片av_九九在线免费视频_狠狠干综合网_久草免费看 | 黄色影视网站_在线视频91国产_偷拍自拍视频在线观看_亚洲av人人澡人人爽人人夜夜_一区二区三国产_人妖一级片_放荡的丰满少妇中文字幕_一级片视频免费 | 日韩免费区_精品国产AV色一区二区深夜久久_av边做边流奶水无码免费_欧洲黄色级黄色99片_国产a网站_免费久久一级欧美_97碰碰碰人妻无码视频_三级黄色性生活视频 | 日韩成人精品在线观看_日韩搞逼_免费日韩片_成人一级免费视频_天天爽夜夜爽人人爽曰_成人免费大全_日本黄色激情片_a国产亚洲欧美精品一区在线观看 | 黄色成年网站_亚洲午夜无码AV毛片久久_sss海量视频在线观看_日韩精品卡1卡二卡3卡四卡_se亚洲_日本添下边无码视频全过程_性爱在线免费视频_亚洲熟妇无码AV不卡在线 | 播五月开心婷婷欧美综合_亚洲av午夜成人片动漫番_日本久久综合网_夜色资源网站ye321_新版天堂资源中文www官网_国产精品嫩草影院免费_久久精品福利_男人的天堂av社区在线 | CAOPORN国产精品免费视频_成人免费视频观看视频_亚洲高清在线看_黄色一级日本_成人va在线_日韩在线精品视频_2020久久超碰国产精品最新_云霸高清中文字幕第一页 | 色综合a_日韩一区二区三区精品视频第3页_成人午夜片av在线看_国产华人av导航_欧美一区二区三区在线观看_欧美丰满熟妇XXXX_国产XXXX做受视频_91九色欧美 | 伊人aa_欧美精品偷拍_一级一级一片在线观看_99草视频_久久精精品久久久久噜噜_91精品国产高清久久久久久_内射白浆一区二区在线观看_亚洲国产一区二区精品视频 | 欧美劲爆婷婷五月久久_亚洲欧美自拍制服日韩一区_久久青草精品38国产_疯狂撞击丝袜人妻_福利一级片_日韩一区二区三区四区五区_最近2019年中文字幕_久久人人视频 | 8x海外华人永久免费_国产一区二区三区av在线_色爱综合网欧美_在线看av网址_午夜嘿嘿_国产91精品入口_国产高清不卡一区二区三区_www.亚洲国产 |