zoukankan      html  css  js  c++  java
  • unity3D中使用Socket进行数据通信(一)

    公司今年3D产品的工作中心主要集中在提高产品深度上,通过对竞争产品的分析,发现我们的缺陷在于多人在线与后台管理部分,多人在线使用unity自带的Network能够搞定,后台部分前段时间主要研究了下Sqlite。因为sqlite本身不带server,作为数据库仅仅是一个文件,sqlite放在server上与client通信的需求事实上就是多个client訪问同一个文件了。查了一些资料,有非常多方法,个人感觉socket不错。一来应用广泛。自己学习后也是一个充电,而来操作灵活,比作文件共享更自由。所以就学习学习了。

    基于TCP协议一个非常重要的概念就是socket(套接字)。记得大学时学的网络七层协议。当时是云里雾里,如今才算有了初步的了解,我们的编程仅仅负责七层协议中的应用层,至于有应用层怎样到传输层一直到最底层临时就不用关心了。仅仅须要知道socket帮我们搞定了底层一些东西。而我们程序相应socket的最重要的两个信息:ip地址和port号。

    ip非常easy理解。就相当于你家的门牌号,这是唯一的。port号就相当于你家的窗户,你想出去的话能够走门,也可走窗户,走1号窗户,走2号窗户。。。。

    (类似电脑中的数据通信)

    好了废话不多说,以下仅仅是一个简单的server与client连接的Demo。兴许会陆续放出数据发送与接收部分。我给出代码与測试部分。至于其它不懂的概念,能够自行百度。

    1、Socket服务端

    使用VS创建应用太控制程序,创建client。


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    using System.Net;
    using System.Net.Sockets;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                //IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });
                IPAddress ip = IPAddress.Parse("192.168.0.13");
                //IPAddress ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
    
                TcpListener tlistener = new TcpListener(ip, 10001);
                tlistener.Start();
                Console.WriteLine("server监听启动......");
                while (true)//看上去是死循环,因为堵塞方法,大部分时间都在等待
                {
                    TcpClient remoteClient = tlistener.AcceptTcpClient();//接收已连接的client,堵塞方法
                    Console.WriteLine("client已连接!local:{0}<---Client:{1}", remoteClient.Client.LocalEndPoint, remoteClient.Client.RemoteEndPoint);
                }
    
                //ConsoleKey key;
                //do
                //{
                //    key = Console.ReadKey(true).Key;
                //}
                //while (key != ConsoleKey.Q);
            }
        }
    }

    2、Socketclient

    Unity3D中建立client。

    创建脚本。将该脚本挂载到空场景的不论什么一个游戏物体上。

    using UnityEngine;
    using System.Collections;
    
    using System.Net;
    using System.Net.Sockets;
    using System;
    
    public class SocketClient : MonoBehaviour
    {
    
        void Start()
        {
            
        }
    
        void Update()
        {
            if(Input.GetKeyDown(KeyCode.Alpha1))
            {
                Client();
            }
            if(Input.GetKeyDown(KeyCode.Alpha2))
            {
                SimulateMultiUserClient();
            }
        }
    
        private void Client()
        {
            TcpClient client = new TcpClient();
            try
            {
                client.Connect(IPAddress.Parse("192.168.0.13"), 10001);//同步方法,连接成功、抛出异常、server不存在等之前程序会被堵塞
            }
            catch (Exception ex)
            {
                Debug.Log("客户端连接异常:"+ex.Message);
            }
            Debug.Log("LocalEndPoint = " + client.Client.LocalEndPoint + ". RemoteEndPoint = " + client.Client.RemoteEndPoint);
        }
    
        private void SimulateMultiUserClient()
        {
            TcpClient client;
            for (int i = 0; i < 2; i++)
            {
                client = new TcpClient();
                try
                {
                    client.Connect(IPAddress.Parse("192.168.0.13"), 10001);
                }
                catch(Exception ex)
                {
                    Debug.Log("客户端连接异常:"+ex.Message);
                }
                Debug.Log("LocalEndPoint = " + client.Client.LocalEndPoint + ". RemoteEndPoint = " + client.Client.RemoteEndPoint);
            }
        }
    }
    



  • 相关阅读:
    LeetCode 88. Merge Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 581. Shortest Unsorted Continuous Subarray
    LeetCode 20. Valid Parentheses
    LeetCode 53. Maximum Subarray
    LeetCode 461. Hamming Distance
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 976. Largest Perimeter Triangle
    LeetCode 1295. Find Numbers with Even Number of Digits
    如何自学并且系统学习计算机网络?(知乎问答)
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7233429.html
Copyright © 2011-2022 走看看