云计算百科
云计算领域专业知识百科平台

Unity网络开发记录(一):实现最简单的unity客户端和服务器通信

服务端

案例通过Socket网络套接字实现Tcp网络通讯

打开VS,新建一个项目

C#服务端整体流程依旧遵从socket开发的基本步骤,和其它语言下的socket开发一样,例如c++

  • 新建socket对象
  • 向socket对象绑定协议簇、传输格式、协议类型
  • 新建一个能存储ip地址以及端口号的对象
  • socket对象绑定ip地址以及端口号
  • socket对象开启监听
  • socket对象持续进行监听连接请求,如有新连接,返回客户端与服务端之间通信的socket对象(此过程阻塞,直到有新连接)
  • 建立连接,此时可以进行信息的收发
  • 切断通讯关闭socket
  • 补充一下前置知识,在Tcp传输下,会经历三报文握手建立连接,四报文挥手释放连接。三报文握手防止以失效的连接请求重新传到服务端,四报文挥手之后要等待2MSL,确保此过程中的报文全部失效,并防止释放请求确认报文丢失,及时重传。Tcp传输具有无差错,不丢失,不重复,不乱序的特点,适合长连接的游戏

    传输信息使用UTF-8编码

    服务端代码:

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;

    namespace C_NetWorke
    {
    internal class Program
    {
    static void Main(string[] args)
    {
    Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    try
    {
    IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
    tcpSocket.Bind(ip);
    }
    catch (Exception)
    {
    return;
    }

    tcpSocket.Listen(1024);

    Socket clientSocket = tcpSocket.Accept();

    clientSocket.Send(Encoding.UTF8.GetBytes("你好,我是服务端"));

    byte[] buffer = new byte[1024];
    int num = clientSocket.Receive(buffer);

    if (clientSocket.RemoteEndPoint != null)
    {
    Console.WriteLine($"收到来次{clientSocket.RemoteEndPoint.ToString()},发来的消息:{Encoding.UTF8.GetString(buffer, 0, num)}");
    }

    clientSocket.Shutdown(SocketShutdown.Both);
    clientSocket.Close();

    Console.ReadLine();
    }
    }
    }

    客户端

  • 新建socket对象
  • 向socket对象绑定,和服务端一样
  • 启动连接,申请向服务器建立连接
  • 连接成功,可以收发数据
  • 切断通讯,关闭socket
  • 在unity中新建一个脚本

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;

    public class Class5 : MonoBehaviour
    {
    private void Start()
    {
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
    try
    {
    socket.Connect(ipPoint);
    }
    catch (SocketException e)
    {
    if (e.ErrorCode == 10061)
    print("服务器拒绝链接");
    else
    print("链接出错" + e.ErrorCode);
    return;
    }
    socket.Send(Encoding.UTF8.GetBytes("你好,我是客户端"));
    byte[] buffer = new byte[1024];
    int num = socket.Receive(buffer);
    if (socket.RemoteEndPoint != null)
    {
    print($"收到来次{socket.RemoteEndPoint.ToString()},发来的消息:{Encoding.UTF8.GetString(buffer, 0, num)}");
    }
    socket.Shutdown(SocketShutdown.Both);
    socket.Close();
    }

    }

    启动服务器后,再运行unity,发现连接成功,此时完成了网络通讯的初步搭建

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Unity网络开发记录(一):实现最简单的unity客户端和服务器通信
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!