unity网络----简单基础
网络
TCP:与打电话类似,通知服务到位
UDP:与发短信类似,消息发出即可
IP和端口号是网络两大重要成员
端口号(Port)分为知名端口号[0-1024,不开放)和动态端口号[1024,10000多,开放可用)
三次握手,四次挥手:

unity网端简单案例:
分为:综合管理部分、客户端和服务器
需要Socket作为媒介来进行交互
见代码:
一、综合管理部分:




1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4 using System.Net;
5 using System.Net.Sockets;
6 using System.Threading;
7 using System;
8
9 //综合管理部分
10 // 可以供客户端和服务器一块使用
11 public class TcpSocket
12 {
13 private Socket socket;//当前实例化的套接字
14 private byte[] data;//socket上的数据
15 private bool isServer; //用来区分服务器 还是客户端
16
17 //构造TcpSocket
18 public TcpSocket(Socket socket,int dataLength, bool isServer)
19 {
20 this.socket = socket;
21 data = new byte[dataLength];
22 this.isServer = isServer;
23 }
24 // 接受----->客户端
25 public void ClientReceive()
26 {
27 //data:数据缓存 0:接受位的偏移量 length
28 socket.BeginReceive(data,0,data.Length,SocketFlags.None,new AsyncCallback(ClientEndReceive),null);
29 }
30 public void ClientEndReceive(IAsyncResult ar)
31 {
32 int receiveLength = socket.EndReceive(ar); //数据的处理
33 string dataStr = System.Text.Encoding.UTF8.GetString(data,0, receiveLength); //把接受完毕的字节数组转化为 string类型
34 if (isServer)
35 { Debug.Log("服务器接受到了:" + dataStr);
36 for (int i = 0; i < Server.Instance.clients.Count; i++) //服务器要回什么
37 {
38 if (Server.Instance.clients[i].ClientConnect())
39 {
40 Server.Instance.clients[i].ClientSeed(System.Text.Encoding.UTF8.GetBytes("服务器回复:"+ dataStr));
41 }
42 }
43 }else {
44 DataManager.Instance.Msg = dataStr;
45 Debug.Log("客户端接受到了:" + dataStr);
46 }
47 }
48
49
50 // 发送---->客户端发送给服务器
51 public void ClientSeed(byte[] data)
52 {
53 socket.BeginSend(data,0, data.Length, SocketFlags.None,new AsyncCallback(ClientSeedEnd),null );
54 }
55
56 private void ClientSeedEnd(IAsyncResult ar)
57 {
58 socket.EndSend(ar);
59 }
60
61
62 //连接----客户端与服务器连接
63 public void ClientConnect(string ip,int port)
64 {
65 socket.BeginConnect(new IPEndPoint(IPAddress.Parse(ip), port),new AsyncCallback(ClientEndConnect),null);
66 }
67 public void ClientEndConnect(IAsyncResult ar)
68 {
69 if (ar.IsCompleted) {
70 Debug.Log("连接成功");
71 }
72 socket.EndConnect(ar);
73 }
74
75 // 客户端与服务器是否连接
76
77 public bool IsClientConnect()
78 {
79 return socket.Connected;
80 }
81 //断开连接
82 public void ClientClose()
83 {
84 if (socket!=null&& ISClientConnect())
85 {
86 socket.Close();
87 }
88 }
89
90 }
二、服务器部分:


注意:回调函数AcceptClient只有当服务器接受连接(连接成功了)才会被调用.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System; // 服务器 public class Server : MonoBehaviour { //单例服务器,继承Mono的
private static Server instance;
public static Server Instance
{
get { return instance; }
}
private void Awake()
{
instance = this;
}
//------------------------------------------------------------------------
private Socket server;//定义一个服务器
public List<TcpSocket> clients;//所有连接的客户端
private bool isLoopAccept = true;//是否循环接受客户端的请求 void Start ()
{
//初始化服务器socket 协议族
server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
server.Bind(new IPEndPoint(IPAddress.Any,));//绑定端口号
server.Listen(); //可以监听的客户端数目
//------------------------------------------------------------------------
//开辟一个线程 处理客户端连接请求 线程要暂停需用listenThread.Abort();
Thread listenThread = new Thread(ReceiveClient);
listenThread.Start(); //开启线程
listenThread.IsBackground = true; //后台运行
//------------------------------------------------------------------------
//初始化连接的客户端
clients = new List<TcpSocket>(); } // 持续处理 接受客户端连接的请求
private void ReceiveClient()
{
while (isLoopAccept)
{
server.BeginAccept(AcceptClient,null); //开始接受客户端连接请求
Debug.Log("检测客户端连接中.....");
Thread.Sleep();//每隔1s检测 有没有连接我
}
}
// 客户端连接成功之后回调
private void AcceptClient(IAsyncResult ar)
{
//连接成功后处理该客户
Socket client = server.EndAccept(ar);
TcpSocket clientSocket = new TcpSocket(client,,true);
clients.Add(clientSocket);
Debug.Log("连接成功");
}
//关闭项目终止线程,停止服务器.
private void OnApplicationQuit()
{
listenThread.Abort();
listenThread.IsBackground = true;//关闭线程
}
}
三、客户端部分:


using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System;
using UnityEngine;
using UnityEngine.UI; //客户端
public class Client : MonoBehaviour {
public InputField input;
public Text receiveText; TcpSocket tcpClient;
Socket client; void Start () {
//注册监听事件
receiveText = GameObject.Find("ReceiveText").GetComponent<Text>(); tcpClient = new TcpSocket(client,,false);//初始化综合处理器
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//初始化客户端
}
void Update () {
if (tcpClient != null && tcpClient.IsClientConnect())//如果客户端不为空且客户端已连接
{
tcpClient.ClientReceive();//执行综合管理器中的ClientReceive()
}
receiveText.text = DataManager.Instance.Msg;
}
public void OnClickConnectBtn()//客户端向服务器开始连接输入(IP和端口号)按钮事件
{
if (!tcpClient.IsClientConnect())
{
tcpClient.ClientConnect("10.50.6.129",);
}
}
public void OnClickToSendServer()//客户端向服务器发送文本消息按钮事件
{
if (tcpClient != null && tcpClient.IsClientConnect() && !String.IsNullOrEmpty(input.text))
{
tcpClient.ClientSeed(System.Text.Encoding.UTF8.GetBytes(input.text));
input.text = "";
}
}
private void OnApplicationQuit()//关闭项目,退出服务器连接
{
if (tcpClient != null && tcpClient.ClientConnect())
{
tcpClient.ClientClose();
}
} }
unity网络----简单基础的更多相关文章
- Android 网络编程基础之简单聊天程序
前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...
- C#网络编程基础知识
C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...
- iOS开发网络篇—网络编程基础
iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...
- 用Netty开发中间件:网络编程基础
用Netty开发中间件:网络编程基础 <Netty权威指南>在网上的评价不是很高,尤其是第一版,第二版能稍好些?入手后快速翻看了大半本,不免还是想对<Netty权威指南(第二版)&g ...
- 【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识
第2章 嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等 ...
- 【网络编程1】网络编程基础-TCP、UDP编程
网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...
- Java网络编程和NIO详解开篇:Java网络编程基础
Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...
- python全栈开发从入门到放弃之socket网络编程基础
网络编程基础 一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务 ...
- TCP/IP网络协议基础
实验楼学习网络协议传送门 一.TCP/IP简介 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电 ...
随机推荐
- WPF 10天修炼 第五天- 内容控件
WPF内容控件 在WPF中,所有呈现在用户界面上的对象都称为用户界面元素.但是只有派生自System.Windows.Controls.Control类的对象才称为控件.内容控件通常是指具有Conte ...
- 【原创】大叔经验分享(48)oozie中通过shell执行impala
oozie中通过shell执行impala,脚本如下: $ cat test_impala.sh #!/bin/sh /usr/bin/kinit -kt /tmp/impala.keytab imp ...
- django-form字段form 和插件widgets
26)django-form字段和插件widgets 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML 一:常用字段 1.Django中Fo ...
- JDBC编程六部曲
今天初学jdbc,明白了大致的编程流程,在此总结一下: JDBC编程可以分为六步——六部曲: * 第一步:注册驱动. * 1.1 获取驱动对象 * 1.2 注册驱动 * 第二步:获取数据库连接 * 第 ...
- python之地基(二)
上一个阶段呢,我们已经学习了python的数据的类型.今天呢,我们来学习各种各样的运算符. 一.基本运算符 a = 10 b = 20 运算符号 描述 示例 + 加——两个对象相加 a+b 输出 ...
- arm寄存器
ARM 处理器拥有 37 个寄存器. 这些寄存器按部分重叠组方式加以排列. 每个处理器模式都有一个不同的寄存器组. 编组的寄存器为处理处理器异常和特权操作提供了快速的上下文切换. 提供了下列寄存器:三 ...
- 网页常用Js代码
1.后退前进 <input type="button" value="后退" onClick="history.go(-1)"> ...
- Asp.net core 启动流程
- RabbitMQ通过Exchange.fanout、不同的队列绑定同一个Exchange实现多播处理
消费者1: static void Main(string[] args) { ConnectionFactory factory = new ConnectionFactory() { HostNa ...
- 开发中常用的JS知识点集锦
索引 1.对象深拷贝 2.网络图片转base64, 在线图片点击下载 3.常用CSS样式记录(超出宽高省略展示/播放icon/按钮背景颜色渐变...) 4.对象深拷贝 5.对象深拷贝 6.对象深拷贝 ...