大家在学习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);
}
}
}

surpersocket客户端的更多相关文章

  1. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  2. 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore

    1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...

  3. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  4. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  5. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  6. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  7. zookeeper源码分析之二客户端启动

    ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...

  8. PHP获取客户端IP

    /** * 获取客户端IP */ function getClientIp() { $ip = 'unknown'; $unknown = 'unknown'; if (isset($_SERVER[ ...

  9. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

随机推荐

  1. 监控自定义信息 —— ESFramework 4.0 快速上手(10)

    在ESFramework 4.0 进阶(02)-- 核心:消息处理的骨架流程一文中,我们介绍了通过挂接IMessageSpy到骨架流程,我们就可以监控到所有收发的消息.由于Rapid引擎已经为我们组装 ...

  2. chapter 13_4 跟踪table的访问

    __index和__newindex都是在table中没有所需访问的index时才发挥作用. 因此,只有将一个table保持为空,才有可能捕捉到所有对它的访问.为了监视一个table的所有访问,就应该 ...

  3. ubuntu下打开chm文件

    CHM文件格式是微软1998年推出的基于HTML文件特性的帮助文件系统,以替代早先的WinHelp帮助系统,它在Windows 98中把CHM类型文件称作“已编译的HTML帮助文件”. chm文件因为 ...

  4. SQL 课程

    今天,我主要学习了数据库的基本查询,模糊查询.排序查询.聚合函数.计数和分组,以及数学函数.字符串函数.时间日期函数. create database lianxi0720gouse lianxi07 ...

  5. quicksort快排

    废话不多说,上代码: void quicksort(int x[], int lo, int hi){ int i = lo, j = hi; ]; while(i <= j){ while(x ...

  6. js 禁止重复提交

    /*分享按钮*/ var flag = true; $(".recommed a").click(function() { if (flag == true) { getServe ...

  7. 笨方法学python--读写文件

    1 文件相关的函数 close read readline  读取文本文件中的一行 truncate  清空文件 write('adb') 写入 2 写文件,首先要在open时,写入权限w targe ...

  8. 如何通过Maven的Jetty插件运行Web工程

    首先建议使用jetty9,因为据官方文档显示,Jetty 7 and Jetty 8 are now EOL (End of Life),如下.但是由于项目使用的版本一般都比较低,这里以jetty8为 ...

  9. xp添加右键"打开文件所在位置"

    以下代码保存为czmb.vbs文件并放在C:\windwos目录下: Set OS = GetObject("winmgmts:\\.\root\cimv2")Set CF = O ...

  10. 《JavaScript高级程序设计》读书笔记 ---操作符二

    关系操作符 小于(<).大于(>).小于等于(<=)和大于等于(>=)这几个关系操作符用于对两个值进行比较,比较的规则与我们在数学课上所学的一样.这几个操作符都返回一个布尔值, ...