栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

unity socket通信

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

unity socket通信

unity服务器客户端编程
  • 1.服务端与客户端代码
  • 2.同一局域网下Socket才能通信
    • 首先判断两个电脑是否在同一个局域网下
    • 使两个电脑处在同一个局域网下

1.服务端与客户端代码
  1. 服务器端:在VS创建一个空的C#项目NetworkServer
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace UnityServer
{
    class NetworkServer
    {
        private static Socket serverSocket;
        private static byte[] buffer = new byte[1024];
        static void Main(string[] args)
        {
            
            //寻址方式 套接字类型 协议方式
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            
            serverSocket.Bind(new IPEndPoint(IPAddress.Any, 6000));//IPAddress.Any代表本机IP
            Console.WriteLine("服务器端启动完成");

            
            serverSocket.Listen(100);//最多可以接收100个客户端请求

            StartAccept();//接收客户端连接
            
            Console.Read();//从标准输入流中读取下一个字符。当用户键入一些输入字符时,此方法基本上阻止其返回。一旦用户按ENTER键,它就会终止。

        }

        //接收客户端连接
        static void StartAccept()
        {
            serverSocket.BeginAccept(AcceptCallback, null);
        }
        
        //接收客户端消息
        static void StartReceive(Socket socket)
        {
            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, socket);
        }

        static void ReceiveCallback(IAsyncResult iar)
        {
            Socket socket = iar.AsyncState as Socket;

            int messgeLength = socket.EndReceive(iar);
            if (messgeLength == 0)
            {
                return;
            }
            //将接收的消息转化为string类型
            string str = Encoding.UTF8.GetString(buffer, 0, messgeLength);
            Console.WriteLine(str);//打印接收的消息
            StartReceive(socket);//循环调用本函数,一直接收消息
        }

        static void AcceptCallback(IAsyncResult iar)
        {
            Socket socket = serverSocket.EndAccept(iar); 
            Console.WriteLine("有个客户端连接过来了");
            Send(socket,"你好,我是服务器");
            StartReceive(socket);            
            StartAccept();//循环调用本函数,一直接收客户端连接
        }

        //向客户端发消息
        static void Send(Socket socket,string str)
        {            
            str = "由服务端发送:" + str;
            var date = ASCIIEncoding.UTF8.GetBytes(str);
            socket.Send(date);
        }

    }
}

  1. 客户端:在unity添加脚本NetworkClient.cs
using UnityEngine;
using System.Collections;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System;

public class NetworkClient : MonoBehaviour
{
    private Socket tcpSocket;//声明Socket
    private byte[] buffer = new byte[1024];
    
    public bool IsConnected = false;//是否已连接的标识

    void Start()
    {
        //创建socket
        tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        //连接服务器
        IPAddress Ip = IPAddress.Parse("127.0.0.1");
        IPEndPoint ip_end_point = new IPEndPoint(Ip, 6000);
        try
        {
            tcpSocket.Connect(ip_end_point);
            IsConnected = true;
            Debug.Log("连接服务器成功");
        }
        catch
        {
            IsConnected = false;
            Debug.Log("连接服务器失败");
            return;
        }
                
        //开始接收消息
        StartReceive();
        //发送一条消息给服务器
        Send("你好,我是客户端");
    }

    //接收消息
    void StartReceive()
    {
        tcpSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, null);
    }

    void ReceiveCallback(IAsyncResult iar)
    {
        int messgeLength = tcpSocket.EndReceive(iar);
        if (messgeLength == 0)
        {
            return;
        }
        //将接收的消息转化为string类型
        string str = Encoding.UTF8.GetString(buffer, 0, messgeLength);
        Debug.Log(str);//打印接收的消息
        StartReceive();//循环调用本函数,一直接收消息
    }

    //发送消息
    void Send(string str)
    {
        str = "由客户端发送:" + str;
        tcpSocket.Send(ASCIIEncoding.UTF8.GetBytes(str));
    }
    
}
  1. 在unity中create empty,挂载NetworkClient.cs脚本
  2. 先运行NetworkServer项目,再运行unity项目,运行结果如下
2.同一局域网下Socket才能通信 首先判断两个电脑是否在同一个局域网下
  1. 进入电脑A的DOS界面(“Windows”+“R”,然后输入cmd进入命令行界面),输入ipconfig查看ip地址

  2. 在B电脑打开命令行,ping一下A电脑的IP地址:能ping通说明在同一局域网下

使两个电脑处在同一个局域网下

控制面板→网络和共享中心→更改设配器设置→网络→双击连接的以太网络,然后点击属性按钮→接着双击“Internet 协议版本4”→接着把IP地址设定为以下的固定IP地址。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901319.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号