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)是传输控制协议和网络协议的简称,它定义了电 ...
随机推荐
- 从头开始学gradle【Gradle 构建基础】
构建基础 Project 和 task:projects 和 tasks是 Gradle 中最重要的两个概念. 任何一个 Gradle 构建都是由一个或多个 projects 组成.每个 projec ...
- luoguP1373 小a和uim之大逃离
DP专题 题目链接 思路 \(f[i][j][a][b][0/1]\)表示在\((i,j)\)这个格子,小a有a滴魔液,他的伙伴有b滴,上一步是小a(0)或者他的伙伴(1)吸取的魔液. (显然)数组开 ...
- TopN案例
准备三份数据 t1 2067 t2 2055 t3 2055 t4 1200 t5 2367 t6 255 t7 2555 t8 12100 t9 20647 t10 245 t11 205 t12 ...
- Linux-SFTP/SSH免密码,钥匙登录
1.原理 登录的客户端要有私钥,被登录的服务器要保存客户端生成的公钥. 2.修改服务器/etc/ssh/sshd_config设置,如下: sudo vi /etc/ssh/sshd_config P ...
- HashMap 学习 (JDK8)
1.hashmap中hash函数的实现中,异或运算操作的结果是什么,为什么要做这样的异或运算 static final int hash(Object key) { int h; return (ke ...
- Linux ☞ Good good study,day day up
一. 修改桌面程序图标 linux的桌面图标都是在/usr/share/applications 目录下的那些 *.desktop文件,修改桌面程序图标就是修改.desktop图标配置文件中Icon的 ...
- MYSQL双主全库同步复制
环境: A.B两台服务器分别安装mysql-5.7.18服务端,配置成互为主从同步. linux系统版本为CentOS7 A服务器ip:192.168.1.7 主机名:test1 B服务器ip:1 ...
- UOJ#440. 【NOIP2018】填数游戏 动态规划
原文链接www.cnblogs.com/zhouzhendong/p/UOJ440.html 前言 菜鸡选手到省选了才做联赛题. 题解 首先我们分析一下性质: 1. 假如一个格子是 0,那么它的右上角 ...
- Cookie、cookie使用方法
Cookie.cookie使用方法.保存用户名密码 //设置Cookie, //cname 获取时所需参数 //username,password 用于记住账号密码,如果只要存一个参数 passwor ...
- bs4解析库
beautifulsoup4 bs4解析库是灵活又方便的网页解析库,处理高效,支持多种解析器.利用它不用编写正则表达式即可方便地实现网页的提取 要解析的html标签 from bs4 import B ...