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 ...
随机推荐
- Storm 集群安装配置
本文详细介绍了 Storm 集群的安装配置方法.如果需要在 AWS 上安装 Storm,你应该看一下 storm-deploy 项目.storm-deploy 可以自动完成 E2 上 Storm 集群 ...
- FZU 2086 餐厅点餐
好久不写博客了……得有快一个月了……看到大神们一篇篇博文 唉……差好多……这一个月 有蓝桥杯还有校赛……校赛签到题都没签完 实力铁牌……不过蓝桥杯一等奖 五月份帝都之行还挺令人期待……清明小长假之前 ...
- c/c++常用的几个关键字总结
一.volatile volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编 ...
- python基础(三)--列表、元组、字典
一.列表: 有序序列,支持索引.切片.循环(for,while) 元素可以被修改: 元素可以是任何数据类型(数字,字符串,列表,布尔值...),可以嵌套: ##增 1.append(object) ...
- ubuntu12.10下OpenFoam的编译
最近在ubuntu12.10下编译OpenFoam,遇到一些问题,小记一下. 首先到官网下载源码包(我这里下载的是OpenFOAM-2.3.0.tgz,ThirdParty-2.3.0.tgz). 1 ...
- ACPI
高级配置与电源接口(Advanced Configuration and Power Interface),简称ACPI.1997年由Intel.Microsoft.Toshiba 所共同制定提供操作 ...
- IIS启用GZip压缩
IIS启用GZip压缩,是提高网站速度和减轻服务器负载的一个优化手段和方法,经测试,网站启用GZip压缩后,速度快了3倍!而配置起来也相当的简单,因此被广大网站管理员使用.本文将详细介绍如何在IIS启 ...
- POJ 3737/三分
题目链接[http://poj.org/problem?id=3737] 题意:给出一个圆锥的表面积,求最大的体积,并输出最大体积的时候的圆锥的高度和底面积. 方法一: 根据定理:圆锥的表面积一定的时 ...
- 2016年7款最流行的Java框架
虽然Java一直被唱衰,但是直到现在Java也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,所以我们为大家搜集了一些目前比较受欢迎的Java框架的消息. 根据RebelLabs对在 ...
- Chapter 1 First Sight——34
"Was that the boy I sat next to in Biology?" I asked artlessly. 你是生物课坐在我旁边的男生吗?我天真烂漫的问道. & ...