surpersocket客户端

时间:2023-03-09 03:08:02
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"), );
tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); tcpClient.BeginConnect(serverIp, asyncResult =>
{
try
{
tcpClient.EndConnect(asyncResult);
}
catch
{
JsonData message = new JsonData();
message["type"] = "";
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[]; //buffer大小,此处为1024 int receivedSize = tcpClient.Receive(buffer);
string rawMsg = Encoding.Unicode.GetString(buffer, , receivedSize);
int rnFixLength = terminateString.Length; //这个是指消息结束符的长度,此处为\r\n
for (int i = ; 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"] = "";
message["wifi"] = "false";
message["message"] = "ServerError服务器报错";
JsonList.Enqueue(message);////////////////// 加入队列 接收服务器消息
break;
}
}
}
else
{
stringBuilder.Append(rawMsg[i]);
i++;
}
}
}
catch
{
JsonData message = new JsonData();
message["type"] = "";
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, , data.Length, SocketFlags.None, asyncResult =>
{
//完成发送消息
// int length =
tcpClient.EndSend(asyncResult);
}, null);
}
}
}