`

unity____udp通讯

 
阅读更多

服务端:

 public class NetWorking : MonoBehaviour
    {

        // Use this for initialization
        void Start()
        {
            Screen.fullScreen = true;
            Debug.Log("networking start");
            InitNet();
         
        }

        Thread myThread;
        public void InitNet()
        {
    
            newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//接收端
            sock = new Socket(AddressFamily.InterNetwork,SocketType.Dgram, ProtocolType.Udp);//广播发送端
            //255.255.255.255 
            sock.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Broadcast, 1);
            iep1 = new IPEndPoint(IPAddress.Broadcast, 8001);
            iep2 =new IPEndPoint(IPAddress.Any, 8002);

            newsock.Bind(iep2);//接收端必须绑定一下

            myThread = new Thread(new ThreadStart(ReceiveSorkets));
            myThread.IsBackground = true;
            myThread.Start();
        }
        string json = null;
        IPEndPoint iep2;
        public void sendMess(string json)
        {
            
            json = Utils.EventHandleToJson("1", "2", "3", "4");
            json = "1" + "|" + "2" + "|"+"plant" +"|"+ "3";
            Debug.Log("json = " + json);

            byte[] data = Encoding.Default.GetBytes(json);
            byte[] utf8Data = Encoding.Convert(Encoding.Default, Encoding.UTF8, data);

            sock.SendTo(utf8Data, iep1);
           
        }
        IPEndPoint iep1;
        Socket sock;
        Socket newsock;

        private void ReceiveSorkets()
        {
            EndPoint point = (EndPoint)iep2;
            while (true)
            {
                byte[] data = new byte[1024];
                //发送接受信息
                int recv = newsock.ReceiveFrom(data, ref point);
                Debug.Log(Encoding.UTF8.GetString(data, 0, recv));
                string json = Encoding.UTF8.GetString(data, 0, recv);
                if (UdpData != null)
                {
                    UdpData(json);
                }
            }
        }
        public void sendSolvedMessage(string id, string gid, string objectType, string dealingState)
        {
                //string json = null;
                //json = Utils.EventHandleToJson(id, gid, objectType, dealingState);
                //byte[] data = new byte[1024];
                //data = Encoding.Unicode.GetBytes(json);
                //newsock.SendTo(data, data.Length, SocketFlags.None, Remote);

               //son = Utils.EventHandleToJson("1", "2", "3", "4");
                json = gid + "|" + id + "|" + objectType + "|" + dealingState;
                Debug.Log("json = " + json);

                byte[] data = Encoding.UTF8.GetBytes(json);
                byte[] utf8Data = Encoding.Convert(Encoding.Default, Encoding.UTF8, data);

                sock.SendTo(utf8Data, iep1);
            
        }
	
		//关闭Socket
        public void NetClosed()
        {
            // Debuger.LogError("NetClosed");
            if (newsock != null)
            {
                 newsock.Close();
                 newsock = null;
            }
            if (sock != null)
            {
                sock.Close();
                sock = null;
            }
        }

        void OnDestroy()
        {
            NetClosed();
        }
}

 客户端:

public class NetWorking : MonoBehaviour
{


     public NetWorkingMsg netWrokingMsg;

    // Use this for initialization
    void Start()
    {
       
        InitNet();
    }

    
    //本地socket

    Socket APPSocket;
    Socket SendSocket;

    //server目标
    EndPoint ServerRemote;

    string input, stringData;
    IPEndPoint iep;
    public void InitNet()
    {

		ipep = new IPEndPoint(IPAddress.Parse("192.168.0.131"), 8001);

        
        //定义网络类型,数据连接类型和网络协议UDP
        APPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);


         iep = new IPEndPoint(IPAddress.Any, 8001);
        APPSocket.Bind(iep);

        SendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   
        isRun = true;
        myThread = new Thread(new ThreadStart(ReceiveSorket));
        myThread.IsBackground = true;
        myThread.Start();
	
    }

    Thread myThread;
    int recv;
    IPEndPoint remote;
    Pack pack = new Pack();

  
    Int32 timeStamp;

	private bool isRun = false;
    //接收数据

    //供UDP使用 start
    public IPAddress broadcast;
    public IPEndPoint ep;
    public UdpClient ReceiveUdpClient;
    private void ReceiveSorket()
    {

        EndPoint ep = (EndPoint)iep; 
		while (isRun)
		{

            byte[] data = new byte[1024];
            int recv = APPSocket.ReceiveFrom(data, ref ep);
  
            stringData = Encoding.UTF8.GetString(data);

            netWrokingMsg.receiveUdp(stringData);	
		}
            
    }


    // 发送消息
    public void SendUdp(string str)
    {
        IPEndPoint sender = new IPEndPoint( IPAddress.Parse(Constant.servicesIP), 8002);
        EndPoint Remote = (EndPoint)sender;
        Debug.Log("zdp senUDP  11111");
        SendSocket.SendTo(Encoding.UTF8.GetBytes(str), Remote);


    }
    public void SendUdpBroadcast()
    { 
            IPEndPoint sender = new IPEndPoint(IPAddress.Broadcast, 8001);
            EndPoint Remote = (EndPoint)sender;
            APPSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);//设置该scoket实例的发送形式
        string request = "你好,TEST SEND!";//初始化需要发送而的发送数据
        byte[] buffer = Encoding.Unicode.GetBytes(request);
        APPSocket.SendTo(buffer, Remote);

    }
    //关闭Socket
    public void NetClosed()
    {
        // Debuger.LogError("NetClosed");
        if (APPSocket != null)
        {
            APPSocket.Close();
			APPSocket = null;
        }
        
		if(SendSocket != null)
		{
			
			SendSocket.Close();
			SendSocket = null;
		}
   
		isRun = false;

    }


    void OnDestroy()
    {
        NetClosed();
    }
}

 

分享到:
评论

相关推荐

    Unity_Socket_Udp_Sync.unitypackage

    Unity使用Udp协议进行Socket连接通讯

    unity客户端、服务单TCP、UDP通讯Demo

    unity客户端、服务单TCP、UDP通讯Demo

    unity3d开发udp通信管理工具

    本工具即为在Unity3D环境下专门设计的UDP通信管理器,它无需额外的插件,仅通过一个名为`UdpManager.cs`的C#脚本就能实现UDP通信功能。 首先,我们来理解一下UDP通信的基本概念。UDP是一种无连接的传输层协议,它不...

    UDP通信.unitypackage

    基于Unity制作的UDP通信Demo,PC/Android平台亲测可用,直接打包可测

    unity UDP通讯 包含心跳机制

    unity UDP通讯 包含心跳机制

    Unity3D网络通讯

    Unity3D中,可以使用System.Net.Sockets命名空间中的TcpClient、TcpListener、UdpClient等类来实现TCP和UDP通讯。TCP提供可靠的数据传输,适合于需要保证数据完整性的场景,如多人在线游戏的数据同步;UDP则更注重...

    unity实现Socket通讯(内含tcp粘包/拆包解决)

    总结,Unity中的Socket通信结合TCP连接和UDP广播,可以实现可靠的服务器与客户端之间的数据交互。解决TCP粘包/拆包问题,可以确保数据正确无误地传输。理解并熟练掌握这些知识点,对于开发网络游戏或实时交互应用至...

    UDP通讯,外加外部配置_unity

    外部文件用来配置udp内容,外部文件可以自主修改

    Unity 串口通讯,完美解决接受16进制数据不完整的情况

    可看资料:https://blog.csdn.net/a1062624730/article/details/132641467 根据网上提供的方法,测试出了最终解决方案,只要加一个sleep就可以,但是位置在前面,详情可看上方链接

    unity3d 实现多人聊天通讯

    总结来说,使用Unity3D实现多人聊天通讯需要掌握Unity的网络API,理解服务器与客户端的交互逻辑,以及数据传输和同步策略。在实际项目中,还需要关注性能优化、安全性和用户体验等方面,确保应用的稳定和高效运行。

    AndroidStudio与Unity3D进行Socket通讯

    总之,Android Studio与Unity3D的Socket通讯是跨平台应用开发中的关键技术,通过理解TCP/IP协议、Socket编程以及Android和Unity3D的API,开发者可以实现高效、稳定的数据交换,为用户提供丰富的互动体验。

    unity3d通信类库

    - **UDP**:用户数据报协议,相比TCP,其速度更快但不保证数据包的顺序和完整性,适用于实时性要求高的游戏场景。 4. **数据序列化**: 在Unity中,数据需要被序列化为可以传输的格式,如JSON或XML。Unity提供...

    聚英继电器交互源码-UDP协议,WPF实例

    4. **串口通讯**:串行端口(Serial Port)通信是计算机与其他设备间常用的一种通信方式。在这个项目中,可能是通过COM口与继电器控制器建立连接,发送UDP数据包,然后由控制器解析并作用于物理继电器。 5. **...

    C# UDP多线程发送接收

    在编程领域,尤其是在网络通信中,UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输协议,常用于实时音频、视频流等对数据完整性要求不高的场景。C#作为.NET框架的主要编程语言,提供了...

    基于C#开发的可用于Unity的串口通讯、网络通讯、数据处理和日志输出基础类库UnityBase.dll

    基于.net3.5,可用于Unity调用的基础类库:包括UDP网络通讯封装类,SerialPort串口通讯封装类,数据处理封装类,PID解算封装类,输出日志封装类等,便于操作运行

    unity3d 高仿王者荣耀 源码下载

    实现了位置无错位同步,UDP通讯。更改客户端指向服务端的IP地址位置在源代码的NetWorking.cs下 1、启动服务端,开启服务 2、点击登录游戏,可以分红和蓝两队,分别是左右两个颜色的开始游戏 3、如果电脑操作方向用...

    CommonSDk.unitypackage

    整合了一些功能,包含unity软件延时启动 文件操作工具类 UDP协议通讯 软件时间锁 快捷方式自动创建开机自启 输出log日志到指定目录

    TCP.unitypackage

    TCP与UDP都是网络SOCKET通信协议,其最大的区别在于UDP是一种不可靠的网络通讯服务,而TCP是一种可靠的网络通信服务。众所周知,TCP通过三次握手来实现网络通讯的,这一机制保证了校验数据,保证了可靠性;而UDP是...

    unity3d 仿王者荣耀 源代码

    实现了位置无错位同步,UDP通讯。更改客户端指向服务端的IP地址位置在源代码的NetWorking.cs下 1、启动服务端,开启服务 2、点击登录游戏,可以分红和蓝两队,分别是左右两个颜色的开始游戏 3、如果电脑操作方向用...

    Unity多人联机实时对战技术.pdf

    低阶功能则更偏向于网络传输的细节,例如WebSockets、UDP/R-UDP、TCP、序列化、分片、防篡改、加密/TLS等。这些功能涉及到数据在网络中的传输方式、安全性以及如何避免数据篡改等技术细节。 在《糖豆人》这样的游戏...

Global site tag (gtag.js) - Google Analytics