前言
最近需要做一款与服务器交互的模拟经营类游戏,主要是语言上的不同,服务器使用的是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方法内调用该函数即刻开始连接服务器和发送信息了。