Unity3D —— Socket通信(C#)
来源:互联网 发布:海尔cosmo平台 知乎 编辑:程序博客网 时间:2024/06/11 01:46
原文链接:http://blog.csdn.net/linshuhe1/article/details/51386559
前言:
在开始编写代码之前,我们首先需要明确:联网方式、联网步骤、数据收发以及协议数据格式
当然在设计时也应该减低代码的耦合性,尽量使得网络层可以在其他地方进行复用,这就需要我们进行接口式的开发。我们这里使用的通信模式是Socket强连接的通信方式,并且使用C#作为编程语言,其实与.NET的Socket通信是一致的。
一、设计思想:
为了方便测试,我直接使用C#写的一个控制台应用,作为服务器,等待客户端的连接,然后使用Unity建立Socket客户端去连接服务器,进行简单的数据通信。这么设计的原因是都基于.net进行开发,也方便理解。
二、实现步骤:
对于网络通信有所了解的都应该知道,数据在网络传输的格式必须以字节流的形式进行,那么免不了要对字节流进行写入和读出操作,为了方便后面的操作,我们有必要封装一个读写字节流的操作类,在这里我定义了一个字节流的操作类ByteBuffer类,用于将各个类型数据写入流中,也可从字节流中读取各种类型的数据:
使用此操作类进行读写数据的操作范例如下:
- 读取数据:
- 写入数据:
1.服务器创建:
在VS中新建一个C#控制台应用,新建项目完成后将上面定义的ByteBuffer.cs类导入工程中,然后开始在入口类Program中开始创建Socket服务器的逻辑。
先引入必要的命名空间:
基本的步骤如下:
- 创建一个服务器Socket对象,并绑定服务器IP地址和端口号;
- 启动一个线程,并在线程中监听客户端的连接,为每个连接创建一个Socket对象;
- 创建接受数据和发送数据的方法。
2.客户端创建:
客户端连接服务器的逻辑相对简单一些,跟服务器一样,先把ByteBuffer类导入到工程中,基本步骤如下:
- 创建一个Socket对象,这个对象在客户端是唯一的,可以理解为单例模式;
- 使用上面创建Socket连接指定服务器IP和端口号;
- 接收服务器数据和发送数据给服务器。
三、样例测试:
1.客户端测试:
在Unity中写一个测试脚本TestSocket.cs,并将此脚本绑到当前场景的相机上:
2.启动服务器:
在Visual Studio中点击运行按钮,启动服务器:
启动正常的话,会弹出一个窗口如下图所示:
3.开始连接:
在Unity中运行当前场景,查看输出日志,假如连接成功,输出如下:
查看服务器窗口,发现双向通信都正常:
四、总结:
这里测试案例其实很简单,协议没有进行如何优化,单纯地发送字符串数据而已,假如针对复杂的数据的话,需要创建完整打包和解包协议数据的机制,而且必要时还需要对数据进行加密操作。
- Unity3D —— Socket通信(C#)
- Unity3D —— Socket通信(C#)
- Unity3D中的Socket通信
- Unity3D的Socket通信
- Unity3D Socket通信 UDP
- Unity3D Socket通信 TCP
- unity3D与Socket通信_01
- Unity3d socket和java socket通信
- Socket通信——Linux下,使用C/C++
- C语言两个进程相互通信—socket
- C语言-Socket通信
- linux c socket通信
- C#Socket 通信
- C语言-Socket通信
- c语言socket通信
- c语言socket通信
- C语言-Socket通信
- c#socket同步通信
- UIAlertController:supportedInterfaceOrientations was invoked recursively
- 设计模式之迭代器模式---以JDK源码为例
- Android 6.0 AMS分析的第二条线:以Launcher启动一个Activity为例,分析应用进程的创建、Activity的启动,以及他们和AMS之间的交互等知识;
- linux下各种小命令
- LeetCode-ZigZag Conversion
- Unity3D —— Socket通信(C#)
- Linux分页机制之分页机制的演变--Linux内存管理(七)
- Android下bluedroid、bluetooth apk介绍
- 深度卷积神经网络.cnn权值网络与cnn权值矩阵的创新思路
- [完]Python,解决Matplotlib制图时的中文问题
- synchronized与static synchronized
- nyoj36 最长公共子序列 【DP(二维)】
- Activity的过渡动画
- aidl