公司今年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进行数据通信(一)的更多相关文章

  1. unity3D中使用Socket进行数据通信(二)

    上一篇博客主要介绍了使用socket搭建服务端和client程序,这一篇来说说socket的数据传输,我们使用socket的目的是解决点对点之间的数据传输,之前提到了socket中一个重要的概念:po ...

  2. Unity3D中简单的C#异步Socket实现

    Unity3D中简单的C#异步Socket实现 简单的异步Socket实现..net框架自身提供了很完善的Socket底层.笔者在做Unity3D小东西的时候需要使用到Socket网络通信.于是决定自 ...

  3. Unity3d在线游戏Socket通讯

    网络游戏是一个人的互动娱乐软件应用.因为它是交互式,当然,需要了解对方的通信.这需要通信Socket:我们今天要实现的主角即套接字.Socket的英文原义是"孔"或"插座 ...

  4. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  5. EBS中利用Socket与外系统通信

    某银行要求做一个签到签退功能,日终EBS系统发送报文与核心系统对帐,规定利用Socket来做传送,记录下步骤: 1.编辑: $INST_TOP/ora/10.1.3/j2ee/oacore/appli ...

  6. 【Unity3d游戏开发】Unity3D中的3D数学基础---向量

    向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础.因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要.在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3 ...

  7. Unity3D中可中途释放的单例

    Unity3D中可中途释放的单例 使用静态类,静态变量的坏处是从程序加载后就一直占用内存,想要释放比较麻烦,可是之前使用的单例,没有提供释放的方法,那是不是也同静态的一样直到程序结束菜释放?那单例的好 ...

  8. 图文详解Unity3D中Material的Tiling和Offset是怎么回事

    图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...

  9. unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)

      刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...

随机推荐

  1. [python][django学习篇][11]后台admin用户登录博客,添加文章---这一章和博客首页设计没有关系

    1 如果没有创建超级管理员账号,先要创建python manage.py createsuperuser 2 在admin后台注册模型(如果没有这一步,登录http://127.0.0.1:8000/ ...

  2. springboot 连接redis

    引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s ...

  3. 理解点击屏幕的事件响应--->对UIView的hitTest: withEvent: 方法的理解

    要理解这两个方法.先了解一下用户触摸屏幕后的事件传递过程. 当用户点击屏幕后,UIApplication 先响应事件,然后传递给UIWindow.如果window可以响应.就开始遍历window的su ...

  4. POJ 2983:Is the Information Reliable?(差分约束)

    题目大意:有n个点在一条直线上,有两类关系:P(x,y,v)表示x在y北边v距离处,V(x,y)表示x在y北边至少1距离出,给出一些这样的关系,判断是否有矛盾. 分析: 差分约束模板题,约束条件P:a ...

  5. [国家集训队][bzoj 2152] 聪聪可可 [点分治]

    题面: http://www.lydsy.com/JudgeOnline/problem.php?id=2152 思路: 题目要求统计书上路径信息,想到树上分治算法 实际上这是一道点分治裸题,我就不瞎 ...

  6. 关于jena-fuseki SPARQL query版本问题的解决方案

    在做“Apache jena SPARQL endpoint及推理”时,遇到了不少问题,主要原因是jena-fuseki版本更新了.以下对问题解决方案做下笔记.想了解更多,请查阅底部参考文献. Que ...

  7. python(5)-- 函数

    python 函数  定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.  使用好处:函数能提高应用的模块性,和代码的重复利用率. 分类:(1)python 内建函数:pytho ...

  8. Do not use built-in or reserved HTML elements as component id: header

    刚刚在搭建项目时发现控制台报错 查找发现是因为组件名称所致,也就是当我们起名一个header.vue的组件时,我们安装的vue插件会自动把name设置为default 这就造成了错误 把header修 ...

  9. 【15】vuex2.0 之 modules

    vue 使用的是单一状态树对整个应用的状态进行管理,也就是说,应用中的所有状态都放到store中,如果是一个大型应用,状态非常多, store 就会非常庞大,不太好管理.这时vuex 提供了另外一种方 ...

  10. 【04】【转】Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)

    目录 简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据 ...