Server:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using Spider.Network; namespace Spider.Server
{
class Program
{
static void Main(string[] args)
{
ServerConfig config=new ServerConfig()
{
BufferSize = ,
Listeners = new List<ListenerConfig>()
{
new ListenerConfig()
{
Backlog = ,
IP="any",
Port=
}
},
MaxConnection =
};
AsyncTcpHost host=new AsyncTcpHost("server.cfg");
host.Use(async (ctx, next) =>
{
Stopwatch watch = new Stopwatch();
watch.Start();
Console.WriteLine("");
await next();
Console.WriteLine("");
watch.Stop();
Console.WriteLine($"it's cost:{watch.ElapsedMilliseconds.ToString()}ms."); }).Use(async(ctx,next) =>
{
Console.WriteLine("");
if (ctx.StreamData!=null)
{
foreach (var data in ctx.StreamData)
{
Console.WriteLine(Encoding.UTF8.GetString(data));
}
}
await ctx.WriteStreamAsync(new List<byte[]>()
{
Encoding.UTF8.GetBytes("Hello Word!"),
Encoding.UTF8.GetBytes("")
});
Console.WriteLine("");
await next();
}).Start();
Console.Read();
host.Stop();
}
}
}

Client:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Spider.Network; namespace Spider.Client
{
class Program
{
static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
watch.Start();
Test();
Console.WriteLine(watch.ElapsedMilliseconds.ToString());
Console.Read();
watch.Stop();
} private static async void Test(int count)
{
List<Task> list=new List<Task>();
for (int i = ; i < count; i++)
{
var t=await Task.Factory.StartNew(async() =>
{
using (var client=new TcpClient(IPAddress.Parse("127.0.0.1"), , ))
{
byte[] Fun(string msg)
{
StringBuilder buffer = new StringBuilder();
for (int k = ; k < ; k++)
{
buffer.Append(msg);
} return Encoding.UTF8.GetBytes(buffer.ToString());
}
//var bytes1=await client.RequestAsync(Fun("abc"));
//var bytes2 = await client.RequestAsync(Fun(""));
IList<byte[]> stream= await client.StreamRequestAsync(new List<byte[]>()
{
Encoding.UTF8.GetBytes(""),
Encoding.UTF8.GetBytes("abc"),
});
//Console.WriteLine(Encoding.UTF8.GetString(bytes1));
//Console.WriteLine(Encoding.UTF8.GetString(bytes2));
Console.WriteLine(Encoding.UTF8.GetString(stream[]));
Console.WriteLine(Encoding.UTF8.GetString(stream[]));
}
});
list.Add(t);
}
Task.WaitAll(list.ToArray());
} }
}

特别提醒:

如果发现任何问题和不足之处或者BUG请email给我:kingge163@163.com

https://files.cnblogs.com/files/kingge/HSocket.Core.Newest.Test.7z

高性能异步Socket框架的更多相关文章

  1. Voovan 是一个高性能异步网络框架和 HTTP(Java)

    Voovan 是一个高性能异步网络框架和 HTTP 服务器框架,同时支持 HTTP 客户端抓取.动态编译支持.数据库访问封装以及 DateTime.String.Log.反射.对象工具.流操作.文件操 ...

  2. 一个高性能异步socket封装库的实现思路 (c#)

    前言 socket是软件之间通讯最常用的一种方式.c#实现socket通讯有很多中方法,其中效率最高就是异步通讯. 异步通讯实际是利用windows完成端口(IOCP)来处理的,关于完成端口实现原理, ...

  3. 《Unity 3D游戏客户端基础框架》多线程异步 Socket 框架构建

    引言: 之前写过一个 demo 案例大致讲解了 Socket 通信的过程,并和自建的服务器完成连接和简单的数据通信,详细的内容可以查看 Unity3D -- Socket通信(C#).但是在实际项目应 ...

  4. 写自己的Socket框架(一)

    本系列仅介绍可用于生产环境的C#异步Socket框架,如果您在其他地方看到类似的代码,不要惊讶,那可能就是我在参考开源代码时,直接“剽窃”过来的. 1.在脑海里思考一下整个socket的链接的处理流程 ...

  5. 【转】C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装

    http://blog.csdn.net/sqldebug_fan/article/details/17557341 1.SocketAsyncEventArgs介绍 SocketAsyncEvent ...

  6. C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装

    原文:C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装 1.SocketAsyncEventArgs介绍 SocketAsyncEventArgs是微软提供的高性能 ...

  7. Java异步NIO框架Netty实现高性能高并发

    原文地址:http://blog.csdn.net/opengl_es/article/details/40979371?utm_source=tuicool&utm_medium=refer ...

  8. 可扩展多线程异步Socket服务器框架EMTASS 2.0 续

    转载自Csdn:http://blog.csdn.net/hulihui/article/details/3158613 (原创文章,转载请注明来源:http://blog.csdn.net/huli ...

  9. C# 实现的多线程异步Socket数据包接收器框架

    转载自Csdn : http://blog.csdn.net/jubao_liang/article/details/4005438 几天前在博问中看到一个C# Socket问题,就想到笔者2004年 ...

随机推荐

  1. SpringMVC常见面试题总结

    1.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一个模块,无需中间整合 ...

  2. [ISSUE] [Centos] Centos Start Nginx Show: Failed to start nginx.service:unit not found

    CMD Line:systemctl start nginx.serviceFailed to start nginx.service: Unit not found. Solution: 1.vim ...

  3. SQL中内连接和外连接的区别

    数据表的连接有: 1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表 ...

  4. what?iView的DropDown没有element的split-button?提issure?等不及了,自己实现一个

    开始正文之前,有必要先说自己实现这个组件的必要性描述. 话说大家做表格时,增删查改按钮都是放在哪里的?最简单的方式应该是这样: 是不是感觉奇丑无比啊,于是改成了这样: 但是这种操作按钮一多后就没位置放 ...

  5. 微信网页授权获取用户openid及用户信息

    $code = $_GET["code"];//获取code $appid=“xxxx”;//公众号appid $APPSECRET="xxx";//公众号ap ...

  6. (Review cs231n) Spatial Localization and Detection(classification and localization)

     重在图像的定位和检测的内容. 一张图片中只有一种给定类别标签的对象,定位则是图像中有对象框:再这些类中,每一个训练目标都有一个类和许多的图像内部对应类的位置选框. 猜想的仅是类标签,不如说它们是位置 ...

  7. python 2 和 python 3 的区别

    p2:重复代码语言不统一不支持中文input() 输入数字 获取数字输入字符串必须自己手动写引号raw_input 和p3中的 input 一样print可以加括号 也可以不加括号p2 中除法获取到的 ...

  8. webservice常用两种身份验证方式

    在项目开发,我们经常会使用WebService,但在使用WebService时我们经常会考虑以下问题:怎么防止别人访问我的WebService?从哪里引用我的WebService?对于第一个问题,就涉 ...

  9. java项目word文件转html文件

    最近在项目开发中用户提出要在电脑上没有装office时在浏览器中打开word文件,最后确定的逻辑:用户选择想要查看的文件,页面js判断文件是否为word.不是执行下载,是后端根据word文件后缀访问对 ...

  10. python实现简单算法

    #选择n^2def selectSort(li): for i in range(len(li)-1): minLoc = i for j in range(i+1,len(li)): if li[j ...