Unity3D常用网络框架与实战解析 学习

摘要:
=null){39GUI.DrawTexture(newRect(0,0,200,300),img);40}41if(img2!

Socket

Unity3D常用网络框架与实战解析 学习第1张Unity3D常用网络框架与实战解析 学习第2张
1 usingSystem;
2 usingSystem.Collections.Generic;
3 usingSystem.Net;
4 usingSystem.Net.Sockets;
5 usingSystem.Text;
6 
7 
8 namespaceSocket服务端 {
9     classProgram {
10         static void Main(string[] args) {
11 
12             //1.创建一个Socket对象
13             Socket tcpServer = newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
14             //2.绑定一个IP和端口
15             //IPAddress ipAddress = new IPAddress(new byte[] { 127,0,0,1 });
16             IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
17             EndPoint endPoint = new IPEndPoint(ipAddress,5000);
18 tcpServer.Bind(endPoint);
19             //3.开始监听客户端的连接请求
20             tcpServer.Listen(100);
21             Console.WriteLine("服务器启动完成");
22             Socket clientSocket =tcpServer.Accept();
23             Console.WriteLine("接收到客户端的连接请求!");
24             //4.发送/接收消息
25             string sendMessage = "Hello Client";
26             //将字符串转换为字节数组
27             byte[] sendData =Encoding.UTF8.GetBytes(sendMessage);
28 clientSocket.Send(sendData);
29             Console.WriteLine("服务器向客户端发送了一条消息:" +sendMessage);
30 
31             //接收客户端消息
32             byte[] receiveData = new byte[1024];
33             int length =clientSocket.Receive(receiveData);
34             string receiveMessage =Encoding.UTF8.GetString(receiveData);
35             Console.WriteLine("服务器接收到客户端发送过来的消息:" +receiveMessage);
36 
37 Console.Read();
38 }
39 }
40 }
SocketServer
Unity3D常用网络框架与实战解析 学习第3张Unity3D常用网络框架与实战解析 学习第4张
1 /*
2 脚本名称:
3 脚本作者:
4 建立时间:
5 脚本功能:
6 版本号:
7 */
8 usingUnityEngine;
9 usingSystem.Collections;
10 usingSystem.Net.Sockets;
11 usingSystem.Net;
12 usingSystem.Text;
13 
14 namespaceVoidGame {
15 
16     public classSocketClient : MonoBehaviour {
17 
18         privateSocket tcpClient;
19         private string serverIP = "127.0.0.1";
20         private int serverPort = 5000;
21 
22         voidStart() {
23             //1.创建一个Socket;
24             tcpClient = newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
25             //2.建立连接请求
26             IPAddress ipAddress =IPAddress.Parse(serverIP);
27             EndPoint endPoint = newIPEndPoint(ipAddress,serverPort);
28 tcpClient.Connect(endPoint);
29             Debug.Log("请求服务器连接");
30             //3.接受/发送消息
31             byte[] receiveData = new byte[1024];
32             int length =tcpClient.Receive(receiveData);
33             string receiveMessage = Encoding.UTF8.GetString(receiveData,0,length);
34             Debug.Log("客户端接收到服务器发来的消息:" +receiveMessage);
35 
36             //发送消息
37             string sendMessage = "Client Say To Server Hello";
38 tcpClient.Send(Encoding.UTF8.GetBytes(sendMessage));
39             Debug.Log("客户端向服务器发送消息:" +sendMessage);
40 }
41 }
42 }
SocketClient

Json

Unity3D常用网络框架与实战解析 学习第5张

Unity3D常用网络框架与实战解析 学习第6张

xml

Unity3D常用网络框架与实战解析 学习第7张

Unity3D常用网络框架与实战解析 学习第8张

Unity3D常用网络框架与实战解析 学习第9张

Unity3D常用网络框架与实战解析 学习第10张

protobuf

Unity3D常用网络框架与实战解析 学习第11张

Unity3D常用网络框架与实战解析 学习第12张

Unity3D常用网络框架与实战解析 学习第13张

Unity3D常用网络框架与实战解析 学习第14张

Unity3D常用网络框架与实战解析 学习第15张

Unity3D常用网络框架与实战解析 学习第16张

Unity3D常用网络框架与实战解析 学习第17张

Unity3D常用网络框架与实战解析 学习第18张

Unity3D常用网络框架与实战解析 学习第19张

www

Unity3D常用网络框架与实战解析 学习第20张Unity3D常用网络框架与实战解析 学习第21张
1 /*
2 脚本名称:
3 脚本作者:
4 建立时间:
5 脚本功能:
6 版本号:
7 */
8 usingUnityEngine;
9 usingSystem.Collections;
10 usingSystem.IO;
11 
12 namespaceVoidGame {
13 
14     public enumGetPicType {
15         Download = 0,
16         LocalLoad = 1
17 }
18 
19     public classPicture : MonoBehaviour {
20 
21         private string url = "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3525821899,4147777390&fm=21&gp=0.jpg";
22 
23         /// <summary>
24         ///从网络下载的图片
25         /// </summary>
26         private Texture2D img = null;
27 
28         /// <summary>
29         ///从本地读取的图片
30         /// </summary>
31         private Texture2D img2 = null;
32 
33 
34         private bool downloadOK = false;
35 
36 
37         voidOnGUI() {
38             if(img != null) {
39                 GUI.DrawTexture(new Rect(0,0,200,300),img);
40 }
41             if(img2 != null) {
42                 GUI.DrawTexture(new Rect(320,0,200,300),img2);
43 }
44             if(GUI.Button(new Rect(210,0,100,20),"从网络加载图片")) {
45 StartCoroutine(DownloadTexture(url,GetPicType.Download));
46 }
47             if(GUI.Button(new Rect(210,50,100,20),"从本地加载图片")) {
48                 if(downloadOK) {
49                     StartCoroutine(DownloadTexture("file://"+Application.streamingAssetsPath+"/dota2.png",GetPicType.LocalLoad));
50                 } else{
51                     Debug.LogError("没有下载的图片");
52 }
53 }
54 }
55 
56         IEnumerator DownloadTexture(stringurl,GetPicType getPicType) {
57             WWW www = newWWW(url);
58             yield returnwww;
59 
60             Texture2D tempImage = null;
61             if(www.isDone && www.error == null) {
62                 switch(getPicType) {
63                 caseGetPicType.Download:
64                     img =www.texture;
65                     tempImage =img;
66                     Debug.Log(tempImage.width + " " +tempImage.height);
67                     break;
68                 caseGetPicType.LocalLoad:
69                     img2 =www.texture;
70                     tempImage =img2;
71                     Debug.Log(tempImage.width + " " +tempImage.height);
72                     break;
73                 default:
74                     tempImage = null;
75                     break;
76 }
77 }
78             if(tempImage != null) {
79                 byte[] data =tempImage.EncodeToPNG();
80                 File.WriteAllBytes(Application.streamingAssetsPath + "/dota2.png",data);
81                 downloadOK = true;
82 }
83 }
84 }
85 }
Picture

NetWorkView

Unity3D常用网络框架与实战解析 学习第22张

Unity3D常用网络框架与实战解析 学习第23张Unity3D常用网络框架与实战解析 学习第24张
1 /*
2 脚本名称:
3 脚本作者:
4 建立时间:
5 脚本功能:
6 版本号:
7 */
8 usingUnityEngine;
9 usingSystem.Collections;
10 
11 namespaceVoidGame {
12 
13     public classServer : MonoBehaviour {
14 
15         private int port = 10100;
16 
17         private string message = "";
18 
19         privateVector2 sc;
20 
21         private voidOnGUI() {
22             switch(Network.peerType) {
23             caseNetworkPeerType.Disconnected:
24 StartServer();
25                 break;
26             caseNetworkPeerType.Server:
27 OnServer();
28                 break;
29             caseNetworkPeerType.Client:
30 
31                 break;
32             caseNetworkPeerType.Connecting:
33                 break;
34             default:
35                 break;
36 }
37 }
38 
39         /// <summary>
40         ///启动服务器
41         /// </summary>
42         private voidStartServer() {
43             if(GUILayout.Button("创建服务器")) {
44                 NetworkConnectionError error = Network.InitializeServer(12,port,false);
45                 switch(error) {
46                 caseNetworkConnectionError.NoError:
47                     break;
48                 default:
49                     Debug.LogError("启动服务器失败");
50                     break;
51 }
52 }
53 }
54 
55         /// <summary>
56         ///服务器正在运行
57         /// </summary>
58         private voidOnServer() {
59             GUILayout.Label("服务器已经运行,等待客户端连接");
60             int length =Network.connections.Length;
61             for(int i = 0;i < length;i++) {
62                 GUILayout.Label("客户端:" +i);
63                 GUILayout.Label("客户端IP::" +Network.connections[i].ipAddress);
64                 GUILayout.Label("客户端端口:" +Network.connections[i].port);
65                 GUILayout.Label("===========");
66 }
67 
68             if(GUILayout.Button("断开服务器")) {
69 Network.Disconnect();
70 }
71 
72             sc = GUILayout.BeginScrollView(sc,GUILayout.Width(280),GUILayout.Height(400));
73 GUILayout.Box(message);
74 GUILayout.EndScrollView();
75 }
76 
77 [RPC]
78         void ReceiveMessage(stringmsg,NetworkMessageInfo info) {
79             message = "发送端:" + info.sender + "消息:" +msg;
80 }
81 }
82 }
Server
Unity3D常用网络框架与实战解析 学习第25张Unity3D常用网络框架与实战解析 学习第26张
1 /*
2 脚本名称:
3 脚本作者:
4 建立时间:
5 脚本功能:
6 版本号:
7 */
8 usingUnityEngine;
9 usingSystem.Collections;
10 
11 namespaceVoidGame {
12 
13     public classClient : MonoBehaviour {
14 
15         private string IP = "127.0.0.1";
16 
17         int port = 10100;
18 
19         string message = "";
20 
21 Vector2 sc;
22 
23         voidOnGUI() {
24             switch(Network.peerType) {
25             caseNetworkPeerType.Disconnected:
26 StartConnect();
27                 break;
28             caseNetworkPeerType.Server:
29                 break;
30             caseNetworkPeerType.Client:
31 OnClient();
32                 break;
33             caseNetworkPeerType.Connecting:
34                 break;
35             default:
36                 break;
37 }
38 }
39 
40         voidStartConnect() {
41             if(GUILayout.Button("连接服务器")) {
42                 NetworkConnectionError error =Network.Connect(IP,port);
43                 switch(error) {
44                 caseNetworkConnectionError.NoError:
45                     break;
46                 default:
47                     Debug.Log("客户端错误" +error);
48                     break;
49 }
50 }
51 }
52 
53         voidOnClient() {
54             sc = GUILayout.BeginScrollView(sc,GUILayout.Width(280),GUILayout.Height(400));
55 GUILayout.Box(message);
56             message =GUILayout.TextArea(message);
57             if(GUILayout.Button("发送")) {
58                 GetComponent<NetworkView>().RPC("ReceiveMessage",RPCMode.All,message);
59 }
60 GUILayout.EndScrollView();
61 }
62 
63 [RPC]
64         void ReceiveMessage(stringmsg,NetworkMessageInfo info) {
65             message = "发送端" + info.sender + "消息" +msg;
66 }
67 }
68 }
Client

photon

Unity3D常用网络框架与实战解析 学习第27张

Unity3D常用网络框架与实战解析 学习第28张

scut

Unity3D常用网络框架与实战解析 学习第29张

Unity3D常用网络框架与实战解析 学习第30张

Unity3D常用网络框架与实战解析 学习第31张

Unity3D常用网络框架与实战解析 学习第32张

Unity3D常用网络框架与实战解析 学习第33张

Unity3D常用网络框架与实战解析 学习第34张

Unity3D常用网络框架与实战解析 学习第35张

Unity3D常用网络框架与实战解析 学习第36张

Unity3D常用网络框架与实战解析 学习第37张

免责声明:文章转载自《Unity3D常用网络框架与实战解析 学习》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用mtrace检查内存泄漏设计原则~下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Unity NavMesh 格式 解析 分析 对比 Recast Navigation

工具软件 Excel Nodepad++ Sublime Unity 5.4 / 5.6 VS RecastDemo CodeBlocks 分析过程以Unity项目-Demo13为例 一. 创建测试模型 在Unity里搭建一个简单的寻路模型,并导出模型obj到Recastnavigation. 首先, 寻路模型要尽可能简单,(在Unity里,只包含2个N...

delphi 操作xml示例(DelphiBBS)

自:http://www.delphibbs.com/keylife/iblog_show.asp?xid=20713 ================================================================ 2005-9-23 21:05:34xml基础操作实例,因为刚开始学,如果有不对的地方,请批评指正,代码...

WebApi使用Token(OAUTH 2.0方式)

1.在项目中添加引用 Microsoft.AspNet.WebApi.Owin Microsoft.Owin.Host.SystemWeb Microsoft.Owin.Security.OAuth Microsoft.Owin.Security.Cookies Microsoft.AspNet.Identity.Owin Microsoft.Owin.C...

使用lambda调用有参函数

package com.mayikt.service; /** * @ClassName YouShenInterface * @Author 蚂蚁课堂余胜军 QQ644064779 www.mayikt.com * @Version V1.0 **/ @FunctionalInterface public interface YouShenIn...

JAVA中IP和整数相互转化

一、基本知识点 IP ——> 整数: ?6?1把IP地址转化为字节数组 ?6?1通过左移位(<<)、与(&)、或(|)这些操作转为int 整数 ——> IP: ?6?1将整数值进行右移位操作(>>>),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP。 ?6?1将整数值进行右移位操...

JAVA发送HTTP请求方式

1. HttpURLConnection 使用JDK原生提供的net,无需其他jar包; HttpURLConnection是URLConnection的子类,提供更多的方法,使用更方便。 package httpURLConnection; import java.io.BufferedReader; import java.io.InputStrea...