永发信息网

如何通过socket向unity传递数据

答案:2  悬赏:70  手机版
解决时间 2021-03-25 20:05
如何通过socket向unity传递数据
最佳答案
Unity 里使用 Socket 需要导入 System.Net.Sockets 名字空间中的类。
下面是一个利用 Socket 接收数据的 Unity 客户端程序例子:
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Net;  
using System.Net.Sockets;  
using System.Threading;  
using UnityEngine;  
  
  
// Socket 客户端
public class SocketHelper  
{  
  
    private static SocketHelper socketHelper=new SocketHelper();  
  
    private Socket socket;  
  
    // 单件
    public static SocketHelper GetInstance()  
    {  
        return socketHelper;  
    }  
  
    private SocketHelper() {  
  
        //采用TCP方式连接  
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
  
        //服务器IP地址  
        IPAddress address = IPAddress.Parse("127.0.0.1");  
  
        //服务器端口  
        IPEndPoint endpoint = new IPEndPoint(address,8000);  
  
        //异步连接,连接成功调用connectCallback方法  
        IAsyncResult result = socket.BeginConnect(endpoint, new AsyncCallback(ConnectCallback), socket);  
  
        //这里做一个超时的监测,当连接超过5秒还没成功表示超时  
        bool success = result.AsyncWaitHandle.WaitOne(5000, true);  
        if (!success)  
        {  
            //超时  
            Closed();  
            Debug.Log("connect Time Out");  
        }  
        else  
        {  
            //与socket建立连接成功,开启线程接受服务端数据。  
            Thread thread = new Thread(new ThreadStart(ReceiveSorket));  
            thread.IsBackground = true;  
            thread.Start();  
        }  
  
    }  
  
    private void ConnectCallback(IAsyncResult asyncConnect)  
    {  
        Debug.Log("connect success");  
    }  
  
    private void ReceiveSorket()  
    {  
        //在这个线程中接受服务器返回的数据  
        while (true)  
        {  
  
            if (!socket.Connected)  
            {  
                //与服务器断开连接跳出循环  
                Debug.Log("Failed to clientSocket server.");  
                socket.Close();  
                break;  
            }  
            try  
            {  
                //接受数据保存至bytes当中  
                byte[] bytes = new byte[4096];  
                //Receive方法中会一直等待服务端回发消息  
                //如果没有回发会一直在这里等着。  
                int i = socket.Receive(bytes);  
                if (i <= 0)  
                {  
                    socket.Close();  
                    break;  
                }  
                Debug.Log(System.Text.Encoding.Default.GetString(bytes));  
            }  
            catch (Exception e)  
            {  
                Debug.Log("Failed to clientSocket error." + e);  
                socket.Close();  
                break;  
            }  
        }  
    }  
  
  
  
    //关闭Socket  
    public void Closed()  
    {  
        if (socket != null && socket.Connected)  
        {  
            socket.Shutdown(SocketShutdown.Both);  
            socket.Close();  
        }  
        socket = null;  
    }  
  
  
  
    //向服务端发送一条字符串  
    //一般不会发送字符串 应该是发送数据包  
    public void SendMessage(string str)  
    {  
        byte[] msg = Encoding.UTF8.GetBytes(str);  
  
        if (!socket.Connected)  
        {  
            socket.Close();  
            return;  
        }  
        try  
        {  
            IAsyncResult asyncSend = socket.BeginSend(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);  
            bool success = asyncSend.AsyncWaitHandle.WaitOne(5000, true);  
            if (!success)  
            {  
                socket.Close();  
                Debug.Log("Failed to SendMessage server.");  
            }  
        }  
        catch  
        {  
            Debug.Log("send message error");  
        }  
    }  
  
  
  
    private void SendCallback(IAsyncResult asyncConnect)  
    {  
        Debug.Log("send success");  
    }  
  
  
}
全部回答
Unity 里使用 Socket 需要导入 System.Net.Sockets 名字空间中的类。
下面是一个利用 Socket 接收数据的 Unity 客户端程序例子:
12345678910
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
文王渭水访贤卦感情
“虐”字开头的成语,除了 虐老兽心 虐人害物
QQ群文件下载了可以离线看么
鲍鱼与什么蔬菜同食相克
保送是什么意思?
chanel的2011/2012秋冬高级定制的秀场背
为什么有的人不吃带馅的食物
谷氨酰转肽酶是什么
吃石榴对人体有什么好处?有什么坏处?
空霸ga1000和1100的区别
您好! 我身高182体重60公斤想通过增肌粉增重
急求墨子十大主张英文翻译
谁能在这六个词里面看出点什么来?看出来就算
以当地邮戳为准是什么意思?
i can___(dance)verywell
推荐资讯
为什么继承法里规定的第二顺序继承人,没有把
急求四句诗 前面四个字是 我爱楚燕 谢谢
小明和小华在周长400米的跑道上练习跑步,他
请懂紫薇斗数的大神给讲解下两人为何会惊人的
粘老鼠纸上的胶不小心弄到地上怎么清理?
什么人如花 成语
想买双跑鞋,只考虑adi和nike,是ub好,还是u
现在还营业吗?去石家庄天山水世界现在水凉吗
获取地址失败 请退回原网页观看,怎么办
长红粮机地址在哪,我要去那里办事
求初三记忆力超强的学霸啊!必采纳,求图的顺
求诗经中比较有意境有感觉的几首,我想背一背,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?