使用Unity自带的WebSockets与Java服务器交互(一)——连接服务器


前言

最近需要做一款与服务器交互的模拟经营类游戏,主要是语言上的不同,服务器使用的是Java语言写的,客户端使用Unity引擎、语言是C#


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用Unity自带的WebSockets

网上查了一下,有很多通过WebSockets联网的都是使用的插件,本人觉得使用插件相对麻烦,而Unity自带的WebSockets库能够满足我的需求。

二、使用步骤

1.引入库

代码如下(示例):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.WebSockets;
using System.Threading;
using System;
using System.Text;
using System.Linq;

2.开始联网

代码如下(示例):

 public async void WebSocket(string service_id)
    {
        try
        {
            ClientWebSocket ws = new ClientWebSocket();
            CancellationToken ct = new CancellationToken();
            
            //添加header
            //ws.Options.SetRequestHeader("X-Token", "eyJhbGciOiJIUzI1N");
            Debug.Log("服务器状态:等待链接....");
            url = new Uri("服务器地址");//链接的服务器地址
            
            await ws.ConnectAsync(url, ct);//开始链接

            Debug.Log("服务器状态"+ws.State);//当ws.State的状态为Open时,连接成功

			ws.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes("hello")), WebSocketMessageType.Text, true, ct); //发送数据也是Text协议和接收数据一样,需要跟服务器那边一致
			
            while (true)   //接收服务器穿过来的数据,用了缓存区,因为服务器传过来的Json长度太长.
            {
                WebSocketReceiveResult result;
                string receivedMessage = "";
                var message = new ArraySegment<byte>(new byte[4096]);
                do
                {
                    result = await ws.ReceiveAsync(message, CancellationToken.None);
                    if (result.MessageType != WebSocketMessageType.Text)//接收数据为Text
                        break;
                    var messageBytes = message.Skip(message.Offset).Take(result.Count).ToArray();
                    receivedMessage += Encoding.UTF8.GetString(messageBytes);
                }
                while (!result.EndOfMessage);

               // Debug.Log("End");

                if (receivedMessage != "{}" && !string.IsNullOrEmpty(receivedMessage))
                {
                	//处理receivedMessage数据
                }
            }
        }
        catch (Exception ex)
        {
            Debug.Log(ex.Message); //联网异常错误
        }
    }

最后在Start方法内调用该函数即刻开始连接服务器和发送信息了。
在这里插入图片描述


总结

以上就是今天要讲的内容,本文仅仅简单介绍了WebSockets的使用,如何发送数据和接收数据需要大家根据自身情况进行修改。
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值