unity socket学习(二)
来源:互联网 发布:手机弹古筝软件 编辑:程序博客网 时间:2024/05/14 14:06
转载于:圣典的unity csharp socket 异步通信 客户端http://game.ceeger.com/forum/read.php?tid=1478
unity csharp socket 异步通信 客户端作者:围城(solq)bolg:http://www.cnblogs.com/solq/服务端用java nio 测试过是可以的。。。。 ... demo : http://unitysgui.sinaapp.com/chatusing UnityEngine;using System.Collections;using System.Net.Sockets;using System.Net;using System;using System.Text;using System.Threading; public class TestAsyncSocketClient2 : MonoBehaviour{ private Socket client = null; private string ip = "127.0.0.1"; private int port = 8989; private int size = 1024; private byte[] readData = new byte[1024]; private byte[] data = new byte[1024]; void Start() { // socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 多socket 复用同一端口 client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint address = new IPEndPoint(IPAddress.Parse(ip), port); //client.Blocking = false; client.BeginConnect(address, new AsyncCallback(Connected), null); //建立异步连接服务 , Connected 进行监听 //connectDone.WaitOne(); } void Connected(IAsyncResult iar) //建立连接 { //Socket client = (Socket)iar.AsyncState; client.EndConnect(iar); //client.BeginReceive(data, 0, size, SocketFlags.None, new AsyncCallback(ReceiveData), client); echo("建立连接"); } void Send(string str) { byte[] msg = Encoding.UTF8.GetBytes(str); client.BeginSend(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(SendData), client); //开始发送 } void SendData(IAsyncResult iar) //发送数据 { Socket remote = (Socket)iar.AsyncState; int sent = remote.EndSend(iar); //关闭发送 remote.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveData), remote); //开始接收 } void Update() { startReceive(); //这步很重要,,,不然会收不到服务器发过来的消息 } bool ReceiveFlag = true; void startReceive() { if (ReceiveFlag) { ReceiveFlag = false; client.BeginReceive(readData, 0, readData.Length, SocketFlags.None, new AsyncCallback(endReceive), client); } } void endReceive(IAsyncResult iar) //接收数据 { ReceiveFlag = true; Socket remote = (Socket)iar.AsyncState; int recv = remote.EndReceive(iar); if (recv > 0) { string stringData = Encoding.UTF8.GetString(readData, 0, recv); text2 += "\n" + "接收服务器数据:+++++++++++++++" + stringData; } } void ReceiveData(IAsyncResult iar) //接收数据 { Socket remote = (Socket)iar.AsyncState; int recv = remote.EndReceive(iar); //关闭接收 注意:如果关闭了接收,就不能接收了 测试是这样 string stringData = Encoding.UTF8.GetString(data, 0, recv); text2 += "\n" + "回收发送数据:+++++++++++++++" + stringData; } void CloseSocket() //关闭socket { if (client.Connected) { echo("关闭socket"); client.Close(); } } void OnApplicationQuit() { CloseSocket(); } void echo(object msg) { Debug.Log(msg); } string text = ""; string text2 = ""; Vector2 p = new Vector2(600, 300); void OnGUI() { GUILayout.BeginVertical(GUILayout.Width(500) ); text = GUILayout.TextField(text); if (GUILayout.Button("发送数据")) { Send(text); } GUILayout.BeginScrollView(p); text2 = GUILayout.TextArea(text2, GUILayout.Height(300)); GUILayout.EndScrollView(); GUILayout.EndVertical(); } }
- unity socket学习(二)
- unity socket学习(二)
- unity学习(二)
- Unity如何实现网络通讯(二):SOCKET
- unity ngui学习(二)
- unity学习Socket(一)
- unity学习Socket(一)
- Linux Socket学习(二)
- Unity GC优化学习(二):Unity内存管理
- unity学习之NGUI(二)
- Unity学习笔记(二)----Space Shooter
- Unity插件NGUI学习笔记(二)
- Python socket编程学习(二)socket客户端
- Socket套接字学习(二)
- Linux下Socket编程学习(二)
- 【网络】c++ socket 学习笔记(二)
- Socket编程学习笔记(二)
- Linux Socket学习二
- STK视频系列(三)
- 物联网:一个已被用滥的词,真的在酝酿浪潮
- 一些CV零碎
- Android中图像变换Matrix的原理、代码验证和应用(二)
- 动态规划---->多段图
- unity socket学习(二)
- SQL Server中的SQL语句优化与效率
- 一道面试题:赛马问题
- 数据库建立索引原则
- LeetCode之Surrounded Regions
- android EditText 银行卡4位加空格
- Java保留两位小数
- spring在web.xml中和在struts中的不同配置
- mysql 表分区