u3d:使用websocket最简单的测试通信

使用插件:besthttp 1.10

u3d版本:5.4.0

代码:找的网上的一篇代码,自己偷懒没写 只简单测试了下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using BestHTTP;
using BestHTTP.WebSocket;
using System;
using BestHTTP.Examples;
using UnityEngine.UI;
using System.Text;

public class WSMgr : MonoBehaviour
{

    //public string url = "ws://localhost:8080/web1/websocket";
    [SerializeField]
    private string url;
    public InputField msg;
    public Text console;

    private WebSocket webSocket;

    private void Start()
    {
        init();
        print("执行");
        //WebSocket1();
    }
    void Update()
    {
        print(webSocket.IsOpen);

    }

    void WebSocket1()
    {
        WebSocket webSocket = new WebSocket(new Uri(url));
        //webSocket.OnOpen...
        //注册事件之后,我们就可以开始连接
        webSocket.Open();
        //在这一步之后,我们将收到一个OnOpen事件,我们可以开始发送消息到服务器
        webSocket.Send("Message to the Server");
        byte[] buffer = new byte[1024];
        webSocket.Send(buffer);
        //所有通信完成之后,就关闭连接
        webSocket.Close();
    }

    private void init()
    {
        webSocket = new WebSocket(new Uri(url));
        webSocket.OnOpen += OnOpen;
        webSocket.OnMessage += OnMessageReceived;
        webSocket.OnError += OnError;
        webSocket.OnClosed += OnClosed;

        webSocket.Open();
        print("执行这里");

    }

    private void antiInit()
    {
        webSocket.OnOpen = null;
        webSocket.OnMessage = null;
        webSocket.OnError = null;
        webSocket.OnClosed = null;
        webSocket = null;
    }

    private void setConsoleMsg(string msg)
    {
        console.text = "Message: " + msg;
    }

    public void Connect()
    {
        webSocket.Open();
        print(webSocket!=null);
    }

    private byte[] getBytes(string message)
    {

        byte[] buffer = Encoding.Default.GetBytes(message);
        return buffer;
    }

    public void Send()
    {
        webSocket.Send(msg.text);
    }

    public void Send(string str)
    {
        webSocket.Send(str);
    }

    public void Close()
    {
        webSocket.Close();
    }

    #region WebSocket Event Handlers

    /// <summary>
    /// Called when the web socket is open, and we are ready to send and receive data
    /// </summary>
    void OnOpen(WebSocket ws)
    {
        Debug.Log("connected");
        setConsoleMsg("Connected");
    }

    /// <summary>
    /// Called when we received a text message from the server
    /// </summary>
    void OnMessageReceived(WebSocket ws, string message)
    {
        Debug.Log(message);
        setConsoleMsg(message);
    }

    /// <summary>
    /// Called when the web socket closed
    /// </summary>
    void OnClosed(WebSocket ws, UInt16 code, string message)
    {
        Debug.Log(message + "close");
        //   setConsoleMsg(message);
        //antiInit();
        //  init();
    }
    //void OnApplicationQuit
    void OnApplicationQuit()
    {
        //print(webSocket.IsOpen);
        //if (webSocket != null && webSocket.IsOpen)
        //{
        print("quit");
        //    webSocket.Close();
        //    //antiInit();
        //}

    }
    private void OnDestroy()
    {
        print("destory");

        //if (webSocket != null && webSocket.IsOpen)
        //{
        //    print("destory");
        //    webSocket.Close();
        //    //antiInit();
        //}
    }

    /// <summary>
    /// Called when an error occured on client side
    /// </summary>
    void OnError(WebSocket ws, Exception ex)
    {
        string errorMsg = string.Empty;
#if !UNITY_WEBGL || UNITY_EDITOR
        if (ws.InternalRequest.Response != null)
            errorMsg = string.Format("Status Code from Server: {0} and Message: {1}", ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message);
#endif
        Debug.Log(errorMsg);
        setConsoleMsg(errorMsg);
        //antiInit();
        //init();
    }

    #endregion
}

脚本中对应的方法填入到对应的button中,执行,不需要切换成webgl直接PC端测试能用,
服务端测试地址:http://ruyice.com/test  我是在这个网址中的websocket进行测试的,不用自己麻烦的搭建服务端

在脚本中的url中填写上图中的测试ws网址:ws://demos.kaazing.com/echo

测试结果:

能运行,测试过程中出现的问题,如果在OnDestory()和OnApplicationQuit()中使用websocket.close()的话就会报错,虽然不影响什么,但是总看着不舒服,所以直接把close方法去掉了,程序关掉的同时也关掉了websocket的,就这样了

原文地址:https://www.cnblogs.com/zbyglls/p/11122146.html

时间: 2024-10-10 01:04:44

u3d:使用websocket最简单的测试通信的相关文章

C# 如何实现简单的Socket通信(附示例)

上周由于有个项目需要用到网络通信这块,然后就花了点时间研究了一下,本来想上周就写出来的,但是突然要忙,所以等到现在. 话说对于网络通信,以前写C++的时候,天天面对着线程和Socket,所以换成C#也就没那么怕了,虽然C++下也没有掌握的多好,但毕竟只是一个小Demo,只作为了解一下过程. 自己写了一个服务端和一个客户端,刚开始比较简单,只是能达到连通,收发信息的目的,但是很粗糙.而后稍加改进呢~加上了多线程,所以能感觉更科学一些,不过自己真的很菜,代码写的不是很好看,下面分两个版本给大家表出来

一个最简单的Socket通信例子

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.  Socket和ServerSocket类库位于java.net包中.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别.不管是

利用KBEngine +U3D 做的一个简单MMO手游Demo

利用KBE +U3D 做的一个简单MMO手游Demo目前只完成到一个普通攻击和一个火球术,  火球术需要点击怪物后才能释放.点击npc后会跳到一个副本.里面有一只半兽人. 欢迎大家来试玩 并提出宝贵意见.http://pan.baidu.com/s/1dDtVjnb 感谢kbe 一直以来的帮助.

mybatis入门学习之(1)+简单例子测试

Mybatis 入门之(1)环境配置+简单例子测试 什么是MyBatis? 它是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的XML或注解用于配置和原始映射,将接口和POJOs(Plan Old Java Objects,普通的 Java对象)映射成数据库中的记录. 其实简单一点说mybatis就是一直访问数据库的技术,它是现在比较流行的一个持久层框架,如果你对JDBC熟悉那就更容易

简单的socket通信

//client#include <iostream> #include <WinSock2.h> #pragma comment(lib, "WS2_32") // 链接到WS2_32.lib using namespace std; int main() { SOCKET so; WSADATA ws; if (WSAStartup(MAKEWORD(2, 2), &ws) != 0) { cout << "WSAStartup

基于html5 localStorage , web SQL, websocket的简单聊天程序

new function() { var ws = null; var connected = false; var serverUrl; var connectionStatus; var sendMessage; var connectButton; var disconnectButton; var sendButton; var open = function() { var url = serverUrl.val(); ws = new WebSocket(url); ws.onope

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Bruce Lee       学习网络编程也一段时间了,刚开始看<UNIX网络编程>的时候,觉得这本厚厚的书好难啊!看到后来,发现并没有想象中的那么难.如果你是新手,建议你看到第二部分结束后,开始着手写代码.不写代码肯定是不行的.看100遍也没有敲一遍实现一遍来的清楚.敲完以后,带着问题去看书,你会

Jmeter 快速入门教程(二)--创建简单web测试

[版权所有: whoistester.com & jmeter.cf] 今天我们就来实际用Jmeter创建一个测试场景,并进行性能测试. 注:由于本人使用中文版本,使用英文版本的请注意具体的菜单及参数名称. 1. 添加线程组(相当于lr里的scenario 设置) 打开jmeter主窗口后, 选择左侧树形结构里的"测试计划". 然后右键选择添加, 选择"threads(users)",我们可以看到 [email protected]开头的是google jm

【IOS】简单的测试银联和微信支付

简单的测试银联和微信支付 简单快速的集成银联支付和微信支付的测试 下载地址:http://www.devstore.cn/code/info/749.html 运行截图:    IOS热门源码下载: 模仿手机支付宝界面 高仿网易4.0新UI框架 实现功能比较齐全的 UITextField 版权声明:本文为博主原创文章,未经博主允许不得转载.