博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D常用网络框架与实战解析 学习
阅读量:6992 次
发布时间:2019-06-27

本文共 9562 字,大约阅读时间需要 31 分钟。

Socket

1 using System; 2 using System.Collections.Generic; 3 using System.Net; 4 using System.Net.Sockets; 5 using System.Text; 6  7  8 namespace Socket服务端 { 9     class Program {10         static void Main(string[] args) {11 12             //1.创建一个Socket对象13             Socket tcpServer = new Socket(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
1 /* 2 脚本名称: 3 脚本作者: 4 建立时间: 5 脚本功能: 6 版本号: 7 */ 8 using UnityEngine; 9 using System.Collections;10 using System.Net.Sockets;11 using System.Net;12 using System.Text;13 14 namespace VoidGame {15 16     public class SocketClient : MonoBehaviour {17 18         private Socket tcpClient;19         private string serverIP = "127.0.0.1";20         private int serverPort = 5000;21 22         void Start() {23             //1.创建一个Socket;24             tcpClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);25             //2.建立连接请求26             IPAddress ipAddress = IPAddress.Parse(serverIP);27             EndPoint endPoint = new IPEndPoint(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

 xml

protobuf

www

1 /* 2 脚本名称: 3 脚本作者: 4 建立时间: 5 脚本功能: 6 版本号: 7 */ 8 using UnityEngine; 9 using System.Collections;10 using System.IO;11 12 namespace VoidGame {13 14     public enum GetPicType {15         Download = 0,16         LocalLoad = 117     }18 19     public class Picture : MonoBehaviour {20 21         private string url = "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3525821899,4147777390&fm=21&gp=0.jpg";22 23         /// 24         /// 从网络下载的图片25         /// 26         private Texture2D img = null;27 28         /// 29         /// 从本地读取的图片30         /// 31         private Texture2D img2 = null;32 33 34         private bool downloadOK = false;35 36 37         void OnGUI() {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(string url,GetPicType getPicType) {57             WWW www = new WWW(url);58             yield return www;59 60             Texture2D tempImage = null;61             if(www.isDone && www.error == null) {62                 switch(getPicType) {63                 case GetPicType.Download:64                     img = www.texture;65                     tempImage = img;66                     Debug.Log(tempImage.width + " " + tempImage.height);67                     break;68                 case GetPicType.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

1 /* 2 脚本名称: 3 脚本作者: 4 建立时间: 5 脚本功能: 6 版本号: 7 */ 8 using UnityEngine; 9 using System.Collections;10 11 namespace VoidGame {12 13     public class Server : MonoBehaviour {14 15         private int port = 10100;16 17         private string message = "";18 19         private Vector2 sc;20 21         private void OnGUI() {22             switch(Network.peerType) {23             case NetworkPeerType.Disconnected:24                 StartServer();25                 break;26             case NetworkPeerType.Server:27                 OnServer();28                 break;29             case NetworkPeerType.Client:30 31                 break;32             case NetworkPeerType.Connecting:33                 break;34             default:35                 break;36             }37         }38 39         /// 40         /// 启动服务器41         /// 42         private void StartServer() {43             if(GUILayout.Button("创建服务器")) {44                 NetworkConnectionError error = Network.InitializeServer(12,port,false);45                 switch(error) {46                 case NetworkConnectionError.NoError:47                     break;48                 default:49                     Debug.LogError("启动服务器失败");50                     break;51                 }52             }53         }54 55         /// 56         /// 服务器正在运行57         /// 58         private void OnServer() {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(string msg,NetworkMessageInfo info) {79             message = "发送端:" + info.sender + " 消息:" + msg;80         }81     }82 }
Server
1 /* 2 脚本名称: 3 脚本作者: 4 建立时间: 5 脚本功能: 6 版本号: 7 */ 8 using UnityEngine; 9 using System.Collections;10 11 namespace VoidGame {12 13     public class Client : 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         void OnGUI() {24             switch(Network.peerType) {25             case NetworkPeerType.Disconnected:26                 StartConnect();27                 break;28             case NetworkPeerType.Server:29                 break;30             case NetworkPeerType.Client:31                 OnClient();32                 break;33             case NetworkPeerType.Connecting:34                 break;35             default:36                 break;37             }38         }39 40         void StartConnect() {41             if(GUILayout.Button("连接服务器")) {42                 NetworkConnectionError error = Network.Connect(IP,port);43                 switch(error) {44                 case NetworkConnectionError.NoError:45                     break;46                 default:47                     Debug.Log("客户端错误" + error);48                     break;49                 }50             }51         }52 53         void OnClient() {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
().RPC("ReceiveMessage",RPCMode.All,message);59 }60 GUILayout.EndScrollView();61 }62 63 [RPC]64 void ReceiveMessage(string msg,NetworkMessageInfo info) {65 message = "发送端" + info.sender + "消息" + msg;66 }67 }68 }
Client

 photon

 scut

 

转载于:https://www.cnblogs.com/revoid/p/6511310.html

你可能感兴趣的文章
2017-2018-1 20155222 《信息安全系统设计基础》第十四周学习总结
查看>>
第五周作业——用状态转换图描绘复印机的行为
查看>>
[HNOI2002]营业额统计
查看>>
Maven学习总结(五)——聚合与继承
查看>>
落谷P3941 入阵曲
查看>>
Java 里的异常(Exception)详解
查看>>
结对开发 随机产生数组并求最大子数组的和
查看>>
微博mini for Windows Phone
查看>>
[PKUWC2018]随机算法
查看>>
两个基于openssl的https client例子
查看>>
libgdx初试
查看>>
课程作业
查看>>
CSS shapes布局
查看>>
vue中如何实现pdf文件预览?
查看>>
ios7官方推荐icon尺寸
查看>>
VUE项目的目录关系
查看>>
基于pygame实现飞机大战【面向过程】
查看>>
Android操作HTTP实现与服务器通信(转)
查看>>
5秒速记php数组排序函数
查看>>
【分享】Objective-C Runtime
查看>>