surpersocket客户端
大家在学习surpersocket时候,都是拿telnet测试的吧,是不是没有 客户端 而感到 烦恼。
我么,就抽了一点时间 写了个简单的客户端代码。
针对QuickStart的 1-Basic 第一部分那 几个 服务器demo
客户端也是c#写的,然后没啥大功能,就是 配合 服务器 粘包的方式,粘包拆包。
你们也可以 在 服务器上 for循环 send数据,看看客户端 是不是分包了。
链接:http://pan.baidu.com/s/1sjxDKQT 密码:xpeh
写在最后,很多人 学程序,心态都不好,头脑不好不要紧,但千万别厌恶世界,也许你花费了大量时间,不及我 三分钟学习。
但千万 不要嫉妒,凡事量力而行就好。
博客我会继续 更精彩的文章和代码给大家 。
核心代码:
using UnityEngine; using System.Collections; using System.ComponentModel; using System.Text; using System.Net.Sockets; using System.Net; using System.Threading; using System.Collections.Generic; using LitJson; public class SocketModel { public Socket tcpClient; public Queue<JsonData> JsonList; public void ClientSend() { JsonList = new Queue<JsonData>(); //主机IP IPEndPoint serverIp = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 3686); tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); tcpClient.BeginConnect(serverIp, asyncResult => { try { tcpClient.EndConnect(asyncResult); } catch { JsonData message = new JsonData(); message["type"] = "1"; message["wifi"] = "false"; tcpClient.Close(); JsonList.Enqueue(message);///////////////// 加入队列 服务器连接失败 } ReceiveMessage(tcpClient); }, null); } private StringBuilder stringBuilder = new StringBuilder(); //这个是用来保存:接收到了的,但是还没有结束的消息 private void ReceiveMessage(object state) //这个函数会被以线程方式运行 { string terminateString = "\r\n"; Socket tcpClient = (Socket)state; while (true) { try { byte[] buffer = new byte[1024]; //buffer大小,此处为1024 int receivedSize = tcpClient.Receive(buffer); string rawMsg = Encoding.Unicode.GetString(buffer, 0, receivedSize); int rnFixLength = terminateString.Length; //这个是指消息结束符的长度,此处为\r\n for (int i = 0; i < rawMsg.Length; ) //遍历接收到的整个buffer文本 { if (i <= rawMsg.Length - rnFixLength) { if (rawMsg.Substring(i, rnFixLength) != terminateString)//非消息结束符,则加入sb { stringBuilder.Append(rawMsg[i]); i++; } else { JsonData jsontext = JsonMapper.ToObject(stringBuilder.ToString()); //转化成json格式数据 if (jsontext["type"] != null) { JsonList.Enqueue(jsontext);////////////////// 加入队列 接收服务器消息 stringBuilder = new StringBuilder(); i += rnFixLength; } else { JsonData message = new JsonData(); message["type"] = "4"; message["wifi"] = "false"; message["message"] = "ServerError服务器报错"; JsonList.Enqueue(message);////////////////// 加入队列 接收服务器消息 break; } } } else { stringBuilder.Append(rawMsg[i]); i++; } } } catch { JsonData message = new JsonData(); message["type"] = "3"; message["wifi"] = "false"; message["message"] = "ServerClosing服务器断开"; JsonList.Enqueue(message);/////////////////// 加入队列 服务器连接失败 tcpClient.Close(); break; } } } public void AsynSend(string message) { if (tcpClient.Connected) { byte[] data = Encoding.Unicode.GetBytes(message); tcpClient.BeginSend(data, 0, data.Length, SocketFlags.None, asyncResult => { //完成发送消息 // int length = tcpClient.EndSend(asyncResult); }, null); } } }