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);
}
}
}
surpersocket客户端的更多相关文章
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore
1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...
- 消息队列 Kafka 的基本知识及 .NET Core 客户端
前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...
- Socket聊天程序——客户端
写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- zookeeper源码分析之二客户端启动
ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...
- PHP获取客户端IP
/** * 获取客户端IP */ function getClientIp() { $ip = 'unknown'; $unknown = 'unknown'; if (isset($_SERVER[ ...
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
随机推荐
- Linode开通新加坡机房:vps速度快,价格不变!
vps服务商linode终于开通了新加坡机房中心,这是linode全球第7个机房,满足日益增长的东南亚市场需求.印度.中国.澳大利亚及周边国家都有很好的用户体验. linode新加坡机房采用思科Cis ...
- SqlServer 汉字转换拼音首字母函数
CREATE function [dbo].[Func_GetPY](@str nvarchar(4000))returns nvarchar(4000)asbegin set @str=RTRIM( ...
- photoshop的页面制作练习2
- drupal中安装CKEditor文本编辑器,并配置图片上传功能
一.下载: 1.CKEditor模块 2.IMCE模块 二.安装 1.复制: 下载完上面两个模块之后,解压,将解压后整个文件夹,复制粘贴,放到 sites\all\modules下面,个人 ...
- php自动运行
<?php ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. set_time_limit(0); //执行时间为无限制,php默认 ...
- [转载] Winform中几种好用的Grid Control
转自 博客园 http://www.cnblogs.com/peterzb/archive/2009/05/29/1491781.html 1.DataGridView .net 2.0框架自带的网 ...
- UVALive 7070 The E-pang Palace(暴力)
实话说这个题就是个暴力,但是有坑,第一次我以为相含是不行的,结果WA,我加上相含以后还WA,我居然把这两个矩形的面积加在一块了吗,应该取大的那一个啊-- 方法就是枚举对角线,为了让自己不蒙圈,我写了一 ...
- Linux Ubuntu 14.04安装LAMP(Apache+MySQL+PHP)网站环境
从虚拟主机到VPS/服务器的过度,对于普通的非技术型的站长用户来说可能稍许有一些困难,麦子建议我们如果能够在虚拟主机环境中满足建站需要的, 还是用虚拟主机比较好.除非我们真的有需要或者希望从虚拟主机过 ...
- .net core 系列
1..net core 验证码 2..net core 导出excel 3..net core 上传文件 4..net core 时间戳转换 5..net core 读取配置文件 6..net cor ...
- Git 开发新的功能分支
软件开发中,总有无穷无尽的新的功能要不断的添加进来.添加一个新功能时,你肯定不希望因为一些实验性质的代码把主分支搞乱了, 所以每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并 ...