unity3D与Socket通信_01
来源:互联网 发布:mac 查看php版本 编辑:程序博客网 时间:2024/06/05 23:55
我会持续记录自己unity与socket交互从入门到运用到项目中的经历,今天带来一个入门的简单Demo,了解socket基本原理,一些用法基本在代码注释里说的很清楚
新建一个工程,新建一个场景把Server脚本挂在到相机或者空对象上保存发布成.exe
再新建一个新场景把Client脚本挂载到相机上,同时运行这两个
记得多点击下服务端的exe 防止在后台休眠,然后点击unity里的客户端的鼠标左键与服务端进行通讯
功能原理在脚本里有详细注释,希望对你有用!!
服务端代码:
using UnityEngine;using System.Collections;using System.Net;using System.Net.Sockets;using System;using System.Threading;using System.Collections.Generic;using System.Text;public class Server : MonoBehaviour {private Socket socketSever;bool isRuning=true;//开一个线程接受操作private void listenRecv(){while (isRuning) {try{socketSever.BeginAccept(new AsyncCallback(AsyncAcceptCallBack),socketSever);}catch(Exception e){}Thread.Sleep (1000);}}//连接回调void AsyncAcceptCallBack(IAsyncResult ar){//从内核得到连接请求Socket listener = (Socket)ar.AsyncState;//堵塞的 直到客服端有请求Socket clientSocket = listener.EndAccept (ar);SocketSatte socketstate = new SocketSatte (clientSocket);socketArr.Add (socketstate);//添加客服端请求}List<SocketSatte> socketArr;private void IntialScoket(){//跟电脑端网卡进行绑定,与接口发送数据,IPAddress.Any电脑自动选择最优网卡进行通讯IPEndPoint enpoint = new IPEndPoint (IPAddress.Any,18010);socketSever = new Socket (enpoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp);socketSever.Bind (enpoint);//绑定端口(把socket和网卡,端口号进行绑定)socketSever.Listen(38);//监听端口(服务端特有的),可以接受38台机器的连接请求Thread thread=new Thread(listenRecv);thread.Start ();socketArr = new List<SocketSatte> ();}void Start(){IntialScoket (); }void Update(){if (socketArr.Count > 0) {for (int i = 0; i < socketArr.Count; ++i) {socketArr [i].BeginRecv ();}}}void OnApplicationQuit(){socketSever.Shutdown (SocketShutdown.Both);socketSever.Close ();}}public class SocketSatte{public Socket socket;public byte[] buffer;public SocketSatte(Socket tempsocket){buffer=new byte[1024];socket = tempsocket;}void RecCallBack(IAsyncResult ar){//从服务端接受的数据字节流大小int length = socket.EndReceive (ar);string ss = Encoding.Default.GetString (buffer,0,length);Debug.Log ("服务端接受的数据:"+ss);BeginSend (ss);}public void BeginRecv(){socket.BeginReceive (buffer,0,1024,SocketFlags.None,RecCallBack,this);}void SendCallBack(IAsyncResult ar){int byteSend = socket.EndSend (ar);Debug.Log ("服务端发送的字节个数:"+byteSend);}public void BeginSend(string ss){byte[] data = Encoding.Default.GetBytes (ss);;socket.BeginSend (data,0,data.Length,SocketFlags.None,SendCallBack,this);}}
客服端代码:
using UnityEngine;using System.Collections;using System.Net;using System.Net.Sockets;using System;using System.Threading;using System.Collections.Generic;using System.Text;public class Client : MonoBehaviour {Socket client;public byte[]bydata=new byte[1024];void Intail(){//服务端地址IPAddress ipaddress = IPAddress.Parse ("127.0.0.1");//服务器的地址和端口IPEndPoint ipend = new IPEndPoint (ipaddress,18010);client = new Socket (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//三次握手client.BeginConnect (ipend,new AsyncCallback(ConnectCallBack),client);}public void ConnectCallBack(IAsyncResult ar){client.EndConnect (ar);Debug.Log ("与服务器完成三次握手");}void RecvCallBack(IAsyncResult ar){int length = client.EndReceive (ar);string ss = Encoding.Default.GetString (bydata,0,length);Debug.Log ("客服端接受的数据:"+ss);}void BeginRecv(){client.BeginReceive (bydata,0,1024,SocketFlags.None,RecvCallBack,this);}void Start () {Intail ();}void SendCallBack(IAsyncResult ar){int byteSend = client.EndSend (ar);Debug.Log ("客服端数据发送的字节个数"+byteSend);}void BeginSend(string ss){byte[] data = Encoding.Default.GetBytes (ss);client.BeginSend (data,0,data.Length,SocketFlags.None,SendCallBack,this);}// Update is called once per framevoid Update () {if (Input.GetMouseButtonDown (0)) {BeginSend ("12321314");}BeginRecv ();}void OnApplicationQuit(){client.Shutdown (SocketShutdown.Both);client.Close ();}}
阅读全文
1 0
- unity3D与Socket通信_01
- Unity3d使用Socket与java服务器通信
- Unity3d使用Socket与java服务器通信
- Unity3d使用Socket与java服务器通信
- Unity3D中的Socket通信
- Unity3D的Socket通信
- Unity3D Socket通信 UDP
- Unity3D Socket通信 TCP
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- Unity3d socket和java socket通信
- Unity3D —— Socket通信(C#)
- Unity3D —— Socket通信(C#)
- Unity3d中的Tcp socket通信(开源)
- Unity3D中的socket通信之八(字节数组与数据转换dll-byte int string float)
- RPC 与 Socket 通信
- 如何快速阅读——《应用篇》
- and...or的 彻底研究
- 从后台获得数据,前台实现数据加载和异步查询
- JDK9的32位版本下载
- GNU常用命令
- unity3D与Socket通信_01
- Base64编码
- Linux 自动加载驱动模块(.ko文件)
- TCP和UDP区别、联系
- java设计模式-策略模式
- 《深入理解java虚拟机》学习笔记(1)--jvm内存区域
- KNL+FPGA是加速深度学习的黄金搭档
- stm32在rt-thread上的RTC(实时时钟)
- 【opencv】 改变图像的对比度和亮度的两种方法