网络

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网络----简单基础的更多相关文章

  1. Android 网络编程基础之简单聊天程序

    前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...

  2. C#网络编程基础知识

    C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...

  3. iOS开发网络篇—网络编程基础

    iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...

  4. 用Netty开发中间件:网络编程基础

    用Netty开发中间件:网络编程基础 <Netty权威指南>在网上的评价不是很高,尤其是第一版,第二版能稍好些?入手后快速翻看了大半本,不免还是想对<Netty权威指南(第二版)&g ...

  5. 【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识

    第2章        嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等 ...

  6. 【网络编程1】网络编程基础-TCP、UDP编程

    网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...

  7. Java网络编程和NIO详解开篇:Java网络编程基础

    Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...

  8. python全栈开发从入门到放弃之socket网络编程基础

    网络编程基础 一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务 ...

  9. TCP/IP网络协议基础

    实验楼学习网络协议传送门 一.TCP/IP简介 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电 ...

随机推荐

  1. 从头开始学gradle【Gradle 构建基础】

    构建基础 Project 和 task:projects 和 tasks是 Gradle 中最重要的两个概念. 任何一个 Gradle 构建都是由一个或多个 projects 组成.每个 projec ...

  2. luoguP1373 小a和uim之大逃离

    DP专题 题目链接 思路 \(f[i][j][a][b][0/1]\)表示在\((i,j)\)这个格子,小a有a滴魔液,他的伙伴有b滴,上一步是小a(0)或者他的伙伴(1)吸取的魔液. (显然)数组开 ...

  3. TopN案例

    准备三份数据 t1 2067 t2 2055 t3 2055 t4 1200 t5 2367 t6 255 t7 2555 t8 12100 t9 20647 t10 245 t11 205 t12 ...

  4. Linux-SFTP/SSH免密码,钥匙登录

    1.原理 登录的客户端要有私钥,被登录的服务器要保存客户端生成的公钥. 2.修改服务器/etc/ssh/sshd_config设置,如下: sudo vi /etc/ssh/sshd_config P ...

  5. HashMap 学习 (JDK8)

    1.hashmap中hash函数的实现中,异或运算操作的结果是什么,为什么要做这样的异或运算 static final int hash(Object key) { int h; return (ke ...

  6. Linux ☞ Good good study,day day up

    一. 修改桌面程序图标 linux的桌面图标都是在/usr/share/applications 目录下的那些 *.desktop文件,修改桌面程序图标就是修改.desktop图标配置文件中Icon的 ...

  7. MYSQL双主全库同步复制

    环境: A.B两台服务器分别安装mysql-5.7.18服务端,配置成互为主从同步. linux系统版本为CentOS7 A服务器ip:192.168.1.7   主机名:test1 B服务器ip:1 ...

  8. UOJ#440. 【NOIP2018】填数游戏 动态规划

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ440.html 前言 菜鸡选手到省选了才做联赛题. 题解 首先我们分析一下性质: 1. 假如一个格子是 0,那么它的右上角 ...

  9. Cookie、cookie使用方法

    Cookie.cookie使用方法.保存用户名密码 //设置Cookie, //cname 获取时所需参数 //username,password 用于记住账号密码,如果只要存一个参数 passwor ...

  10. bs4解析库

    beautifulsoup4 bs4解析库是灵活又方便的网页解析库,处理高效,支持多种解析器.利用它不用编写正则表达式即可方便地实现网页的提取 要解析的html标签 from bs4 import B ...