Unity网络基础-Server篇

# Unity网络服务器

在Unity内搭建一个简单的网络服务器

一个十分简单的服务开启,通过在UI按钮上关联StartServer()方法来开启服务器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Net;
using System.Net.Sockets;

public class ServerScripts : MonoBehaviour {
    Socket socket;//套字节(其用于标识客户端请求的服务器和服务。)
    byte[] buffer;

    void Awake()
    {
        //开启后台运行,方便测试
        Application.runInBackground = true;
    }

    /*
         * 1.初始化套接字
         * 2.确定IP地址和端口号
         * 3.监听
         * 4.开始接受用户连接请求
         * 5.接受用户链接,开始接受数据
         * 6.接受完成数据
         * */


    void Start()
    {
        buffer = new byte[1024];//初始化
    }

    public void StartServer()
    {
        if(socket !=null)
            return;

        //1.初始化套节字
        socket = new Socket(AddressFamily.InterNetwork/*IP地址类型*/,SocketType/*双向读取数据*/,ProtocolType.Tcp/*传输数据的协议*/);

        //2.绑定IP地址和端口号
        //IPAddress.Any是本机IP
        socket.Bind(new IPEndPoint(IPAddress.Any,23456));

        //3.监听
        //最大连接数
        socket.listen(10)

        //4.开始接收用户连接请求
        socket.BeginAccept(ServerAccept,socket);
    }

    //接受用户连接请求的回调方法
    void ServerAccept(System.IAsyncResult ar)
    {
        socket = ar.AsyncState as Socket;
        //结束当前连接请求
        Socket workingSocket = socket.EndAccept(ar);
        //开始接受客户端数据
        workingSocket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,ServerRecive,workingSocket);
        //4.开始接收用户连接请求          
        socket.BeginAccept(ServerAccept,socket);
    }


    //接收数据完成回调方法
    void ServerRecive(System.IAsyncResuit ar)
    {
        socket = ar.AsyncState as Socket;
        //返回当前接收到的数据字节量
        int count = socket.EndReceive(ar);
        string coutent = "";
        if(count>0)
        {
            coutent = UTF8Encoding.UTF8.GetString(buffer);
        }
        socket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,ServerRecive,socket);
    }


可以通过coutent来输出接收到的数据,通过添加Text的UI来添加一些输出语句,例如“用户已链接”来更加清晰的检测是否有连接上服务器。
下篇:客户端 Client搭建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值