unity3D中使用Socket进行数据通信(一)
公司今年3D产品的工作中心主要集中在提高产品深度上,通过对竞争产品的分析,发现我们的缺陷在于多人在线与后台管理部分,多人在线使用unity自带的Network能够搞定,后台部分前段时间主要研究了下Sqlite。因为sqlite本身不带server,作为数据库仅仅是一个文件,sqlite放在server上与client通信的需求事实上就是多个client訪问同一个文件了。查了一些资料,有非常多方法,个人感觉socket不错。一来应用广泛。自己学习后也是一个充电,而来操作灵活,比作文件共享更自由。所以就学习学习了。
基于TCP协议一个非常重要的概念就是socket(套接字)。记得大学时学的网络七层协议。当时是云里雾里,如今才算有了初步的了解,我们的编程仅仅负责七层协议中的应用层,至于有应用层怎样到传输层一直到最底层临时就不用关心了。仅仅须要知道socket帮我们搞定了底层一些东西。而我们程序相应socket的最重要的两个信息:ip地址和port号。
ip非常easy理解。就相当于你家的门牌号,这是唯一的。port号就相当于你家的窗户,你想出去的话能够走门,也可走窗户,走1号窗户,走2号窗户。。。。
(类似电脑中的数据通信)
好了废话不多说,以下仅仅是一个简单的server与client连接的Demo。兴许会陆续放出数据发送与接收部分。我给出代码与測试部分。至于其它不懂的概念,能够自行百度。
1、Socket服务端
使用VS创建应用太控制程序,创建client。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Net;
using System.Net.Sockets; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });
IPAddress ip = IPAddress.Parse("192.168.0.13");
//IPAddress ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0]; TcpListener tlistener = new TcpListener(ip, 10001);
tlistener.Start();
Console.WriteLine("server监听启动......");
while (true)//看上去是死循环,因为堵塞方法,大部分时间都在等待
{
TcpClient remoteClient = tlistener.AcceptTcpClient();//接收已连接的client,堵塞方法
Console.WriteLine("client已连接!local:{0}<---Client:{1}", remoteClient.Client.LocalEndPoint, remoteClient.Client.RemoteEndPoint);
} //ConsoleKey key;
//do
//{
// key = Console.ReadKey(true).Key;
//}
//while (key != ConsoleKey.Q);
}
}
}
2、Socketclient
在Unity3D中建立client。
创建脚本。将该脚本挂载到空场景的不论什么一个游戏物体上。
using UnityEngine;
using System.Collections; using System.Net;
using System.Net.Sockets;
using System; public class SocketClient : MonoBehaviour
{ void Start()
{ } void Update()
{
if(Input.GetKeyDown(KeyCode.Alpha1))
{
Client();
}
if(Input.GetKeyDown(KeyCode.Alpha2))
{
SimulateMultiUserClient();
}
} private void Client()
{
TcpClient client = new TcpClient();
try
{
client.Connect(IPAddress.Parse("192.168.0.13"), 10001);//同步方法,连接成功、抛出异常、server不存在等之前程序会被堵塞
}
catch (Exception ex)
{
Debug.Log("客户端连接异常:"+ex.Message);
}
Debug.Log("LocalEndPoint = " + client.Client.LocalEndPoint + ". RemoteEndPoint = " + client.Client.RemoteEndPoint);
} private void SimulateMultiUserClient()
{
TcpClient client;
for (int i = 0; i < 2; i++)
{
client = new TcpClient();
try
{
client.Connect(IPAddress.Parse("192.168.0.13"), 10001);
}
catch(Exception ex)
{
Debug.Log("客户端连接异常:"+ex.Message);
}
Debug.Log("LocalEndPoint = " + client.Client.LocalEndPoint + ". RemoteEndPoint = " + client.Client.RemoteEndPoint);
}
}
}
unity3D中使用Socket进行数据通信(一)的更多相关文章
- unity3D中使用Socket进行数据通信(二)
上一篇博客主要介绍了使用socket搭建服务端和client程序,这一篇来说说socket的数据传输,我们使用socket的目的是解决点对点之间的数据传输,之前提到了socket中一个重要的概念:po ...
- Unity3D中简单的C#异步Socket实现
Unity3D中简单的C#异步Socket实现 简单的异步Socket实现..net框架自身提供了很完善的Socket底层.笔者在做Unity3D小东西的时候需要使用到Socket网络通信.于是决定自 ...
- Unity3d在线游戏Socket通讯
网络游戏是一个人的互动娱乐软件应用.因为它是交互式,当然,需要了解对方的通信.这需要通信Socket:我们今天要实现的主角即套接字.Socket的英文原义是"孔"或"插座 ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- EBS中利用Socket与外系统通信
某银行要求做一个签到签退功能,日终EBS系统发送报文与核心系统对帐,规定利用Socket来做传送,记录下步骤: 1.编辑: $INST_TOP/ora/10.1.3/j2ee/oacore/appli ...
- 【Unity3d游戏开发】Unity3D中的3D数学基础---向量
向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础.因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要.在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3 ...
- Unity3D中可中途释放的单例
Unity3D中可中途释放的单例 使用静态类,静态变量的坏处是从程序加载后就一直占用内存,想要释放比较麻烦,可是之前使用的单例,没有提供释放的方法,那是不是也同静态的一样直到程序结束菜释放?那单例的好 ...
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...
- unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...
随机推荐
- 【homework week5】初步了解敏捷开发——自由与约束的哲学统一
“自由与束缚的哲学统一”或许不该放到标题上去,毕竟它只是我灵光一闪的感悟.但这个spark让我感到高中到大学的哲学应该也没有白学,这是让人非常兴奋的一件事. 所以我还是把它放到了标题上. 来谈敏捷软件 ...
- leetcode 389 map iterator 的使用
class Solution { public: char findTheDifference(string s, string t) { map<char,int>Map_Temp; ; ...
- fetch上传cookie数据方法
Fetch 请求默认是不带cookie的.需要设置fetch的第二个参数: 先来看下,请求头部信息Request method - 使用的HTTP动词,GET, POST, PUT, DELETE, ...
- UIAlertController 实现kvo实现mes文字设置
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"更新提示" message:[NS ...
- 洛谷P2168 荷马史诗 [NOI2015]
题目描述 追逐影子的人,自己就是影子 ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由<奥德赛&g ...
- Java中Collections的sort方法和Comparable与Comparator的比较
一.Comparable 新建Student1类,类实现Comparable接口,并重写compareTo方法 public class Student1 implements Comparable& ...
- 只有mdf文件而没有ldf文件修复方法
原文发布时间为:2010-09-16 -- 来源于本人的百度文章 [由搬家工具导入] 只有mdf文件而没有ldf文件修复log文件或者重新生成一个log文件的方法 EXEC sp_attach_s ...
- C++调用Matlab引擎 图像读写与处理 (知识+代码篇)
准备知识 之 Matlab Engine 执行命令 /* Execute matlab statement */ int engEvalString(Engine* ep, const char* s ...
- eclipse集成JBPM
JBPM4.4是一款运用的比较广泛的工作流开发框架,最近参与的BSS项目里面也有用到了JBPM4.4.自己在已经搭建的框架下使用,但更详细的理解并没有.因此借此机会学习一下. 学习版本为:JBPM为4 ...
- django+vue+nginx生产环境部署配置
部署环境: 1. linux redhat 7.1 2.python 3.6.3 3. vue 4. nginx 5. gunicorn 6. supervisord 安装: 一. 基础环境安装 1. ...