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!!

    主站蜘蛛池模板: 久草免费新视频_亚洲视频www_中文av一区_久久国产午夜精品理论片34页_无码人妻丰满熟妇A片护士_成人黄频_刀光枪影免费版_黄色一级片视频播放 真人啪啪姿势88种_精品在线不卡_又大又粗又硬又黄的免费视频_久久国产激情视频_高清av在线_久久久久久久福利_92精品视频_日本一线在线观看 | 日本精品一区二区三区香蕉久久_亚洲人成网7777777国产_久草色视频在线观看_99久久国产综合精品女不卡_男女啪啪免费观看无遮挡_亚洲一区精品无码_手机在线免费av_色黄啪啪网18以下勿进 | 噜噜高清欧美内射短视频_a一级黄色录像_国产高清在线_国产精品久久久亚洲女人_久久99热这里有精品6_婷婷激情综合色五月久久图片_亚洲AV无码一区二区三区18_免费香蕉视频 | 黄色欧美日韩_在线一级_黄色一级片在线免费观看_亚洲色欲综合一区二区三区_婷婷去俺也去_国产一区观看_青青草免费在线观看_LULUHEI噜噜黑最新地址 | 欧美精品一区二区三区久久_国外b2b网站毛片_亚洲国产精品久久久久久69_久久91久久久久麻豆精品_日日爽夜夜操_91看片免费在线观看_51cao在线观看_国产九色在线 | 国产一级毛片国语版_欧美网站大全在线观看_91精品亚洲影视在线观看_日本人妻人人人澡人人爽_国产原创AV在线播放不卡_在线观看爽视频_18禁强伦姧人妻又大又_亚洲综合久久av一区二区三区 | 在线观看免费视频18_亚洲日韩欧美在线观看_www视频在线观看_欧美一区二区三区成人久久片_99久久一区_黄色在线_999国产在线_97精产国品一二三产区 | 黑人粗硬进入过程视频_麻豆传媒在线看_在线观看中文字幕国产_妺七AV导航福利_成人在线观看免费_一本久道久久综合狠狠爱_日韩综合网_成人视屏网站 | 欧美高清69_国产成人在线一区_久久久91麻豆精品国产一区_御姐av在线_色欲狠狠躁天天躁无码中文字幕_天堂久久一区二区_蝌蚪91在线_狠狠爱综合 国内精品伊人久久久久AV影院_国产欧美洲中文字幕_国产天天骚_黄色大全免费观看_av免费人人干_无码一区自拍偷拍第二页_天堂va蜜桃_成人午夜黄色 | 人禽猛交免费观看_日韩av在线免费播放_人人爽人人爽人人片AV东京热_欧美国产日产观看_av线网_中文一区二区三区四区_成人免费网站视频ww破解版_人妻巨大乳HD免费看 | 日韩精品一区二区三区视频网_日本黄色片在线播放_影音先锋黄色网址_特级毛片A级毛片免费播放_日本成人午夜视频_97超碰精品成人国产_久久婷婷五月综合色国产_亚洲视频在线观看网址 | 国产精品看片_女人色熟女乱_国产美女精品AⅤ在线播放_在线免费观看视频a_一级做人爱c黑人影片_免费A级毛片无码视频_日本三级黄色网址_年轻的朋友在线免费观看 | 精品一二三区视频_天天激情综合_国产高潮呻吟久久_国内精品在线一区_91精品国产色综合久久久蜜臀_综合在线视频_国产成人精品午夜福利_国产av无码专区亚洲av软件 | 一级毛片一级毛片一级毛片aa一_国av在线_日韩美女乱淫作爱欣赏_日本a∨视频_久久久久久久久91_久久众筹精品私拍模特_97久久精品_午夜1234 | CAOPORN国产精品免费视频_成人免费视频观看视频_亚洲高清在线看_黄色一级日本_成人va在线_日韩在线精品视频_2020久久超碰国产精品最新_云霸高清中文字幕第一页 | 一本大道久久a久久精二百_人妻熟女视频一区二二区_久久精品国产欧美日韩热_国产精品久久久久久TV_韩国19禁无遮挡啪啪无码网站_色77影院_校园都市经典激情另类_国精品无码一区二区三区在线 | 91成人精品_又爽又黄axxx片免费观看_国精一区二区三区_成人禁片又硬又粗太爽了_日日射影院_超碰人人草人人_成人国产精品蜜柚视频_黄色一级片免费观看 | 国产精品看片_女人色熟女乱_国产美女精品AⅤ在线播放_在线免费观看视频a_一级做人爱c黑人影片_免费A级毛片无码视频_日本三级黄色网址_年轻的朋友在线免费观看 | www久_无码国产福利av私拍_无码中文字幕日韩专区_亚洲中又文字幕精品av_精品国产欧美_在线观看免费视频91_久久婷婷日日澡天天添_九色91国产 | 在线视频青青草_久久精品天天中文字幕人妻_7777色鬼XXXX欧美色妇_国产98色在线_国产乱人伦偷精品视频免_中文字幕乱码亚洲精品一区_精品久久久久久中文字幕一区二区_国产一卡三卡四卡无卡精品 | 欧美激情一区在线_日韩毛片一二三区_国产n老影院视频_模特三点尽露私拍在线_av在线免费资源_欧美成αⅴ人在线视频_丁香婷婷深爱五月亚洲综合_亚洲私人无码综合久久网 | 夫妻生活视频现场免费看_又硬又粗进去好爽A片春色视频_男女视频免费看_全黄特一级_福利视频91_中字无码av高清在线播放_国产精品自拍系列_四虎影院www | 亚洲成人久久一区_水蜜桃视频免费在线观看_视频在线播放国产_日本国产视频_一区二区最新免费视频_人妻无码中文专区久久综合_亚洲亚色_中文在线视频 | 小黄文纯肉污到你湿_狠狠色伊人亚洲综合成人_一区二区高清_久久综合久久受_XXXX乌克兰高潮喷水_chinese少妇国语对白_草青青视频_久草tv | 国产精品久久久久久久毛片_一级黄色片久久_青青草华人在线_精品人伦一区_久久久久久逼_被夫の上司に犯中文字幕_www.国产一区二区三区_欧美亚洲激情 | 国产精品久一_午夜无人区免费网站_二人午夜免费观看在线视频_精品一区二区久久久久_亚洲欧美一区二区三区孕妇_国产成人99精品免费视频明星_欧美A级理论片在线播放_成人精品在线观看视频 | 无遮挡啪啪摇乳动态图GIF_国产一区福利_欧美性三级_91情侣在线精品国产_伊人75_欧美在线网站_www.久久网_欧美黄色一级 | 国产精品日韩欧美一区二区_精品久久人人做人人爽综合_国产在线第一_制服丝袜美腿一区二区_日日夜夜一区二区_中文字幕亚洲精品无码_oxox国产午夜精品_欧美性视频在线看 | 欧美日韩高清一区二区_www.se天堂_99国产精成人午夜视频一区二区_亚洲国产高清在线一区二区三区_久久婷婷五月综合色99啪_国产婷婷色一区二区三区在线_小尤奈无码视频_a4yy欧美一区二区三区 | 91成人精品_又爽又黄axxx片免费观看_国精一区二区三区_成人禁片又硬又粗太爽了_日日射影院_超碰人人草人人_成人国产精品蜜柚视频_黄色一级片免费观看 | 91网站免费在线观看_色欲老女人人妻综合网_国产亚洲精品A在线看_91制片一二三专区亚洲_亚洲黄色视频网站在线观看_亚洲精彩视频在线观看_欧美成人精品二区三区99精品_4444亚洲人成无码网在线观看 | 97亚洲色欲色欲综合网_操操影视_成人一区二区三区在线观看_久久久久国产一区二区三区不卡_黄色片aaaa_麻豆传媒免费网站_色第一页_久久久成人网 | 中文字幕人妻在线中字_性色av一区二区三区四区_亚洲永久入口_国内精品二区_日韩毛片网站_最近2019年日本中文免费字幕_亚洲AV无码一区二区三区DV_成人播放视频 | a级片观看_91丨porny丨最新_亚洲国产日韩a综合在线_女人黄色毛片_久久久国产日韩_深夜免费看_国产wwwxx_亚洲中文字幕日韩无码 | 亚洲一区二区三区含羞草_黑人内谢中国女人视频_国产精品亚洲专一区二区三区_国产一区二区福利在线_欧洲免费视频_婷婷影院在线综合免费视频_成人免费视频国一国二在线观看_日本少妇xxxx软件 | 五月天我淫我色_免费观看羞羞视频网站_欧美午夜精品一区二区三区91_天地争霸美猴王国语在线观看免费_日日射天天射_国产91成人video_亚洲精品aⅴ中文字幕乱码_亚洲午夜精品A品久久 | 啄木乌欧美一区二区三区在线_免费一级a毛片夜夜看_亚洲第一狼人天堂久久_性猛交╳XXX乱大交_韩国激情高潮无遮挡hd_巨胸喷奶水WWW视频网站_蜜桃av入口观看_女性自慰网站免费观看w | 欧美最猛性xxxxx69交_欧美在线观看视频一区_欧美极品一区_99精品产国品一二三产区_日韩人妻无码精品久久免费一_中文字幕亚洲综合久久综合_又色又爽又黄又免费看的视频_久久69国产精品久久69软件 | 国产三级精品三级在线专区_日韩av永久免费网站_国产麻豆91精品三级站_男女啪啪做爰高潮无遮挡_97久久精品久久免费观看_91视频黄污_中文字幕av免费在线观看_潮喷无码正在播放 | aV无码久久久久不卡蜜桃_aaa日韩_91精品久久久久久久久久不卡_99精品视频精品精品视频_天天爽天天爽夜夜爽毛片_伊人网综合视频_99在线免费观看_国产精品乱码久久久久 | 日本系列第一页_国产黑丝啪啪_亚洲成AV人片在线观看无线_国产视频一区精品_国产中日韩久久久噜噜久久_色yeye免费人成网站在线观看_av男人在线东京天堂_91视频插插插 |