当前位置: 首页 > news >正文

内网怎么做网站/怎么建立一个自己的网站

内网怎么做网站,怎么建立一个自己的网站,flash个人网站,有没有男女做那个的网站在C# WINFORM 项目中使用HP-SOCKET网络引擎(客户端与服务器端“状态更新”的模型与实现之一) Unity2D 客户端使用HP-SOCKET连接服务器(客户端与服务器端“状态更新”的模型与实现之二) 服务器端的对象更新(客户端与服…

 

在C# WINFORM 项目中使用HP-SOCKET网络引擎(客户端与服务器端“状态更新”的模型与实现之一)

Unity2D 客户端使用HP-SOCKET连接服务器(客户端与服务器端“状态更新”的模型与实现之二)

服务器端的对象更新(客户端与服务器端“状态更新”的模型与实现之三)

 

 

HP-SOCKET的服务器已经启动,我们在WINFORM用HP-SOCKET client组件去连接:

1、使用了HP-SOCKET的client组件。

2、使用的PACK包模式,就是只接收整包的数据,不用再担心粘包掉包之类的。

3、发送的是:一个对象封包为json字符串再转为的一串byte。

            bwobj one = new bwobj { bwtype = 1, longjson = "123456789123456789" };var bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(one));         HPclient.Send(bytes, bytes.Length);

4、服务器接收到的一串byte,解包为json字符串,再解为一个对象。

这些收到的对象被放在一个线程安全的ConcurrentBag对象集合里面,后面会安排其它线程来去走这些报文对象。

            //data->string->object 解包bwobj one = JsonConvert.DeserializeObject<bwobj>(Encoding.UTF8.GetString(data));        bws.Add(one);

client端的winform全部实现代码:

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;using HPSocket;
using HPSocket.Tcp;
using HPSocket.Thread;
using Newtonsoft.Json;namespace client2020
{public partial class Form1 : Form{private readonly ITcpPackClient HPclient = new TcpPackClient();public static ConcurrentBag<bwobj> bws = new ConcurrentBag<bwobj>(); //报文集合   public Form1(){InitializeComponent();Control.CheckForIllegalCrossThreadCalls = false;}private void Form1_Load(object sender, EventArgs e){// 演示设置client属性// 缓冲区大小HPclient.SocketBufferSize = 4096; // 4K// 异步连接HPclient.Async = true;// pack模型专有设置HPclient.MaxPackSize = 4096;     // 最大封包HPclient.PackHeaderFlag = 0x01;  // 包头标识, 要与客户端对应, 否则无法通信// 要连接的服务器地址和端口(也可以调用Connect()方法时传入服务器ip和端口)// 例如: _client.Connect("127.0.0.1", 555)HPclient.Address = "127.0.0.1";HPclient.Port = 15555;// 事件绑定HPclient.OnPrepareConnect += OnPrepareConnect;HPclient.OnConnect += OnConnect;HPclient.OnReceive += OnReceive;HPclient.OnClose += OnClose;}private void toolStripButton1_Click(object sender, EventArgs e){client_go();}private void toolStripButton2_Click(object sender, EventArgs e){            //线程           Thread lsThread = new Thread(new ThreadStart(sendsomething));lsThread.IsBackground = true;lsThread.Start();           }private void sendsomething(){bwobj one = new bwobj { bwtype = 1, longjson = "123456789123456789" };var bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(one));         HPclient.Send(bytes, bytes.Length);}private void client_go(){try{            // 连接到目标服务器if (!HPclient.Connect()){throw new Exception($"error code: {HPclient.ErrorCode}, error message: {HPclient.ErrorMessage}");}    }catch (Exception ex){AddLog($"exception: {ex.Message}");}}private HandleResult OnPrepareConnect(IClient sender, IntPtr socket){AddLog($"OnPrepareConnect({sender.Address}:{sender.Port}), socket handle: {socket}, hp-socket version: {sender.Version}");return HandleResult.Ok;}private HandleResult OnConnect(IClient sender){AddLog("OnConnect()");return HandleResult.Ok;}private HandleResult OnReceive(IClient sender, byte[] data){AddLog($"OnReceive(), data length: {data.Length}"); return HandleResult.Ok;}private HandleResult OnClose(IClient sender, SocketOperation socketOperation, int errorCode){AddLog($"OnClose(), socket operation: {socketOperation}, error code: {errorCode}");return HandleResult.Ok;}private void AddLog(string log){listBox1.Items.Add($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] {log}\r\n");}public class bwobj{public int bwtype { get; set; }public string longjson { get; set; }}}
}

--------------unity客户端连接HP-SOCKET服务器-----------------------

 

后面测试“状态更新”的例子,可能会用到2D图像的展示,比如客户端控制一个小坦克对象,所以unity也要连上服务器。

unity2019中建一个项目,加入canvas桌布,加入一个button,canvas桌布和主摄像机关联,在game中设定屏幕分辨率。

button中新建一个脚本NewBehaviourScript.cs。

全部代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Collections.Concurrent;
using System.Text;using HPSocket;
using HPSocket.Tcp;
using HPSocket.Thread;
using Newtonsoft.Json;public class NewBehaviourScript : MonoBehaviour
{private readonly ITcpPackClient HPclient = new TcpPackClient();// Start is called before the first frame updatevoid Start(){// 缓冲区大小HPclient.SocketBufferSize = 4096; // 4K// 异步连接HPclient.Async = true;// pack模型专有设置HPclient.MaxPackSize = 4096;     // 最大封包HPclient.PackHeaderFlag = 0x01;  // 包头标识, 要与客户端对应, 否则无法通信// 要连接的服务器地址和端口(也可以调用Connect()方法时传入服务器ip和端口)// 例如: _client.Connect("127.0.0.1", 555)HPclient.Address = "127.0.0.1";HPclient.Port = 15555;// 事件绑定//  HPclient.OnPrepareConnect += OnPrepareConnect;HPclient.OnConnect += OnConnect;HPclient.OnReceive += OnReceive;HPclient.OnClose += OnClose;HPclient.Connect();}// Update is called once per framevoid Update(){  //按下ESC键则退出游戏 if (Input.GetKeyDown(KeyCode.Escape)){HPclient.Dispose();Application.Quit();}}public void sendsomething(){bwobj one = new bwobj { bwtype = 1, longjson = "longlonglonglong" };var bytes = System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(one)); HPclient.Send(bytes, bytes.Length);}private HandleResult OnPrepareConnect(IClient sender, IntPtr socket){AddLog($"OnPrepareConnect({sender.Address}:{sender.Port}), socket handle: {socket}, hp-socket version: {sender.Version}");return HandleResult.Ok;}private HandleResult OnConnect(IClient sender){AddLog("OnConnect()");return HandleResult.Ok;}private HandleResult OnReceive(IClient sender, byte[] data){AddLog($"OnReceive(), data length: {data.Length}");return HandleResult.Ok;}private HandleResult OnClose(IClient sender, SocketOperation socketOperation, int errorCode){AddLog($"OnClose(), socket operation: {socketOperation}, error code: {errorCode}");return HandleResult.Ok;}private void AddLog(string log){Debug.Log($"{log}\r\n");}public class bwobj{public int bwtype { get; set; }public string longjson { get; set; }}}

注意点:

1、在assets目录中放入hpsocket和json的类库:

2、程序编译发布选择对应环境为x86_64模式:

unity客户端使用HP-SOCKET连接了服务器:

 

 

 

unity hpsocket json dll文件打包共享:

https://pan.baidu.com/s/1kX7qixyJ-wXbb65L5yK5ww

http://www.jmfq.cn/news/4735081.html

相关文章:

  • 有域名了如何自己做网站/今天发生的重大新闻内容
  • 做网站要到通信管理局备案/关键词搜索技巧
  • 哈尔滨建站哪个好/外链怎么发
  • 外贸网站如何建设/广告网站推荐
  • 网站制作明细报价表/网络推广哪家好
  • 榆林网站优化/seo网站快速排名软件
  • 网站建设案例多少钱/网店代运营
  • 秒收的网站/免费搜索引擎推广方法有哪些
  • 连云港关键字优化案例/优化设计三年级上册答案
  • axure可以做网站/网络营销类型有哪些
  • 个人做的网站百度搜索不到/北京推广优化经理
  • 网站备案资料查询/百度图片搜索入口
  • 网站开发怎么报价/seo网站seo
  • c asp.net网站开发书/网络视频营销
  • 新疆哪里做网站/百度快速排名优化工具
  • 做一个动态网站/排名优化
  • 网站如何调用微博/线下推广的渠道和方法
  • 哈尔滨手机网站制作/郑州有没有厉害的seo
  • 优化网站的公司/网络销售的方法和技巧
  • wordpress 修改语言包/最新seo教程
  • 瓮安做网站/google搜索引擎入口2022
  • 如何做网站的链接结构/百度关键词价格查询软件
  • 做个网站做什么呢/湖南seo优化推荐
  • 简单的网站建设合同书/重庆网站搜索引擎seo
  • 广州哪里有做网站/广州疫情升级
  • 有免费做海报的网站吗/搜狗排名优化工具
  • 密云做网站的/软文自助发稿平台
  • 重庆建网站计划/广州市新闻最新消息
  • 网站推广与营销/免费永久注册顶级域名网站
  • 上海高端网站建设服务器/最新疫情最新数据