基于IHttpAsyncHandler的TCP收发器】的更多相关文章

上一篇文章中,我们提到使用IHttpAsyncHandler来进行UDP的收发操作.由于UDP模型比较简单,所以运行没什么问题.这一篇我主要是使用IHttpAsyncHandler来进行TCP的收发操作.由于TCP的模型比较复杂,所以在设计的时候,稍微麻烦了一些. 核心讲解 首先,我贴上代码,然后来逐一讲解: using System; using System.Web; using System.Net.Sockets; using System.Net; using System.Text;…
很难把UDP和Asp.net扯到一起,但是由于最近项目中需要通过网页发送控制指令到中间件,再由中间件发送到下位机的需求.所以就研究了一下是否可以通过asp.net操控UDP Socket实现数据的收发,结果证明是可以的. 服务端代码逻辑 在这个实现过程中,其核心组件就是IHttpAsyncHandler接口,相信大家都明白IHttpHandler是来干什么用的,那么IHttpAsyncHandler就是其异步版本,可以实现操作的异步进行.并且由于这个接口提供了事件完成回调机制,所以能够非常方便的…
一.分布式消息总线以及基于Socket的实现 在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于.NET Socket Tcp 技术实现的分布消息总线,也是一个简单的发布订阅框架: 并且以案例的形式为大家演示了如何使用这个分布式消息总线架构发布订阅架构模式的应用程序,在得到各位同仁的反馈的同时,大家也非常想了解订阅者离线的情况,即支持离线构发布订阅框架. 二.离线架构 不同于订阅者.发布者都同时在…
本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Service1改名为MainService 4): 添加一个Interface来定义Service的契约 4.1):截图如下所示 4.2):IOrderService.cs的代码如下所示 using System; using System.Collections.Generic; using System…
基于.NET Socket Tcp的发布-订阅框架 一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用的程序之中写数据库轮循代码,这样就会产品一个很严重的两个问题,第一个问题是延迟,轮循机制要定时执行,必须会引起延迟,第二个问题是数据库压力过大,当进行高频度的轮循会生产大量的数据库查询,并且如果有大量的使用者进行轮循,那数据库的压力就更大了. 那么…
基于“泵”的TCP通讯(接上篇) 上一篇博客中说了基于“泵”的UDP通讯,附上了一个Demo,模拟飞鸽传书的功能,功能不太完善,主要是为了说明“泵”在编程中的应用.本篇文章我再附上一个关于TCP通讯的两个Demo,也都采用了“泵”模式: 1.由于我把通讯部分的代码写在了一个dll中,这个demo只是简单的应用这个dll,主要完成发送字符串.字节流.可序列化对象等功能,效果图如下: 图1 服务端 图2 客户端 2. 一个简单的屏幕监控程序,主要有屏幕监控.键盘鼠标监控.键盘鼠标控制等功能.监控服务…
我们知道,libnids本身可以实现TCP数据流的重组,但是如果一个TCP流数据量比较大的时候,就会分成好多个TCP报文段,这些报文段在网络中的传播可能是乱序的,利用libnids可以帮助我们按顺序接收到这些报文段,即实现TCP报文段的重组. 但是我们如何把这些顺序的报文段重新还原成一个完整的数据文件,也是要考虑的一个问题,因为在很多时候,单个的报文段对我们的意义不大,我们需要一个完整的数据,这样才有助于我们进一步分析网络中的数据内容. 下面的程序实现了基于libnids的TCP数据流的还原,我…
NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候,程序也可以做其他事情,以实现线程的异步操作. 考虑一个即时消息服务器,可能有上千个客户端同时连接到服务器,但是在任何时刻只有非常少量的消息需要读取和分发(如果采用线程池或者一线程一客户端方式,则会非常浪费资源),这就需要一种方法能阻塞等待,直到有一个信道可以进行I/O操作.NIO的Selector选…
  基于libuv的TCP设计(一) 基于libuv的TCP设计(二)   一.第二版本的libuv_tcp已经基本可以使用.不会出错与崩溃现象,支持几百路客户端同时连接.可是有一缺陷就占用CPU非常高.因为IDLE阶段一直检测有无数据需要发送,所以当服务器空闲时IDLE会空转,占用CPU.如今对此流程进行了改进.     二.改进 1.去掉prepare,check,idle事件 2.prepare里的判断用户关闭tcp和发送数据由uv_async_send代替 3.重新定义客户端数据stru…
1.实验项目名称:基于Linux的TCP网络聊天室 2.实验目的:通过TCP完成多用户群聊和私聊功能. 3.实验过程: 通过socket建立用户连接并传送用户输入的信息,分别来写客户端和服务器端,利用多线程来实现多用户模式,服务器端随时准备接收客户端发送的消息,并判断该消息类型(私聊或群聊)来进行对应的转发工作,客户端随时接受来自服务器端的消息,从而实现消息的同步. (1)开启服务器. (2)开启客户端,输入用户昵称,客户端开始与服务器建立连接. (3)群聊功能,一名用户发送消息,聊天室的其他成…
一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用的程序之中写数据库轮循代码,这样就会产品一个很严重的两个问题,第一个问题是延迟,轮循机制要定时执行,必须会引起延迟,第二个问题是数据库压力过大,当进行高频度的轮循会生产大量的数据库查询,并且如果有大量的使用者进行轮循,那数据库的压力就更大了. 那么在这个时间,就需要一套能支持发布-订阅模式的分布式消…
上一篇博客中说了基于“泵”的UDP通讯,附上了一个Demo,模拟飞鸽传书的功能,功能不太完善,主要是为了说明“泵”在编程中的应用.本篇文章我再附上一个关于TCP通讯的两个Demo,也都采用了“泵”模式: 1.由于我把通讯部分的代码写在了一个dll中,这个demo只是简单的应用这个dll,主要完成发送字符串.字节流.可序列化对象等功能,效果图如下: 图1 服务端 图2 客户端 2. 一个简单的屏幕监控程序,主要有屏幕监控.键盘鼠标监控.键盘鼠标控制等功能.监控服务端可以同时监控多个客户端,效果图如…
1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TCP通讯的文件上传.下载.自动更新的知识点,是作者多年技术生涯的积累,基于开源的Networkcomms3.0框架.NetworkComms框架,是成熟稳定的c#编写的TCP通信框架.作者的多个系统都基于此框架,并在实际项目中使用,一直很稳定.         2.本系统主要实现了3个功能,(1)客户…
TCP(Transmission Control Protocol传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.在qt中,Tcp协议主要是用QTcpServer和QTcpSocket实现的.整个流程如下图所示.…
TCP/IP协议虽然方便,但是由于是基于流的传输(UDP是基于数据报的传输),无论什么项目,总少不了解决拆包分包问题. 以前的项目总是每个程序员自己写一套拆包分包逻辑,实现的方法与稳定性都不太一致.终于有了做基线的机会,自己写了一个基于libevent的拆包分包库. 本文档黏贴一些核心的内容. //回调接口 class ITcpPacketNotify{public:virtual void OnConnected(int fd) = 0;virtual void OnDisConnected(…
LWIP 版本:2.0.3 上一篇文章是写如何将 LWIP 移植到板子上,今天晚上记录基于 LWIP 实现与主机的网络通信. 先是打开了原子的实验例程,大概浏览了一遍,觉得 TCP 网络网络通信也就是那么一些套路.什么 创建.配置.绑定.监听.accept ....,果断复制源文件到工程路径下,调整头文件包含直至编译无误.将 tcp_server_init( ) 加入到 main 中,下载测试,果然出现问题. ping 都 ping 不通了,尴尬..... 问题解决过程: 出问题了是好事,可以更…
socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议. 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的. 也有人将socket说成ip+port,ip是用来标识互联…
服务器端 package com.thinkvenus.study.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; /** *…
一.本人设想的TCP服务器有如下特性: 1.启动服务,一直监听端口. 2.有新连接(客户端)就通知用户.并把连接接收到的数据回调给用户. 3.客户端连接上后用户可在任意时间发送数据给它. 4.客户端断开时关闭或用户可手动关掉. 以上操作都可以不同线程在完成. 二.使用libuv遇到的问题 由于对libuv不熟悉+其文档,调用其函数时吃了不少苦头. 1.libuv的特性 libuv是基于event驱动的,当调用uv_run后就会一直启动event循环,阻塞其线程(event loop thread…
本人一直在寻找一个跨平台的网络库,boost与ACE比较庞大,不考虑.对比了libevent,libev,libuv后,最终选择了libuv.可libuv文档少,例子也简单,对于tcp只有个echo-server的例子.网上也找过对其封装的例子,如下 libsourcey库,封装了许多库.对libuv的封装跟其他代码耦合比较紧,难为剥离 http://sourcey.com/libuv-cpp-wrappers/C++11封装的,可惜VS10未完全支持C++11 https://github.c…
​1 程序界面设计 TCP客户端在上位机开发中应用很广,大多数情况下,上位机软件都是作为一个TCP客户端来与PLC或其他服务器进行通信的.TCP客户端的主要功能就是连接服务器.发送数据.接收数据.断开连接,而不同场合的区别在于发送数据和接收数据的内容不同. 本案例主要是开发一个TCP客户端软件,具备基本的连接功能,并可以发送ASCII.UTF8等不同格式的字符串,也支持发送16进制字符串发送,同时支持文件和JSON格式数据发送.根据以上功能,设计程序界面如下图所示: 2 程序代码设计 接收信息显…
19年写的一个基础的TCP服务框架,内置了一个简单IOC容器,当时的目标是一方面能作为组件供第三方集成实现TCP通讯相关功能,另一方面作为提供一种服务框架范式.所以框架核心点主要还是通过适度的封装,隐藏底层的通讯细节,最终调用者接受到的是经过合包分包处理的字节数组,不涉及具体的协议解析,大家如果使用可以再基于业务进行适度的封装. 好,废话不多说,简单介绍下整个架构和源码细节. Jtcp-cmmon Jtcp-cmmon主要放置一些基础配置与工具类. 1.这里注意的服务配置类与默认配置项 Jtcp…
本文提供一个完整的TCP Server实例,包括动态连接库.单元测试.验收测试.Winform模拟测试.供新手学习,还望老手多提意见. 项目地址:https://tcpserversocket.codeplex.com/ (可直接Download项目工程) 系统结构 项目文件如下: TcpServerSocket:项目核心动态链接库,如果在别的项目中使用,只用引用该项目生成的DLL即可: WindowsFormsApplication1:一个简单的winform应用程序,让你快事了解如何在Win…
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(STream socket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram Socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户—服务器服务器 服务器是指在网络环境下运行相应的应用软件,为网上用户提供…
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(STream socket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram Socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户—服务器服务器 服务器是指在网络环境下运行相应的应用软件,为网上用户提供…
在日常工作中,有时候需要到远程服务器上部署新版本的系统,由于远程服务器出于外网,所以每次都要开QQ连接,非常麻烦.索性就研究了下IHttpasyncHandler,并结合Juqery ProgressBar,打造了一款大文件传送器.其基本原理就是首先在客户端将大文件分段拆分,然后写入内存流,最后发送到服务器上.在上传的同时,会利用异步Handler来获取当前进度并推送到前台显示.图示效果如下(当前缓存设置为5000字节大小): 图示结果 (图1,传送到36%的时候) (图2,传送到100%的时候…
环境 python版本:2.7 IDE:pycharm TCP/UDP协议均为传输层的协议,绝大部分应用程序之间的通信都是使用TCP或UDP,故而在网络通信中及其重要,想详细了解他们之间的差异,可参考http://www.cnblogs.com/vathe/p/6815928.html 1.模拟后台程序,实现浏览器访问 Server端代码 # coding=utf- import socket def handle_request(client): buf = client.recv() cli…
TCP部分: 参考:http://blog.csdn.net/sbfksmq/article/details/50808863 另附:linux下的tcp/udp参考:https://www.cnblogs.com/lyggqm/p/9111010.html TCP_SEVER: // winsocketTCPServer.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" //服务器 #include<iostream> #includ…
http://bbs.csdn.net/topics/280046868 使用套接字完成,按照tcp的方式在一个套接字里维持一个状态机. //定义枚举: enmu state{ CLOSED,//没有连接 SYN-SENT,//发送了syn,等代服务器ack ACK_RECEIVE,//接到服务器ack SYNACK_SEND,//恢复服务器的ack,确认 ESTABLISHED,//成功建立 } //定义你自己的用udp连接函数 int newconnect( int sd, const st…
nginx非常早就支持tcp proxy.可是一直不知道其使用,近期在nginx blog上看见了.一些实践者将其运用到数据库訪问的负载均衡以及实现读写分离,来提高数据库的吞吐量,这里我不会讲详细的搭建实现.仅仅是最一些理论上的设计猜想. 直接上图 db集群.分为读db和写db.写db向读db同步数据. 读db仅仅能读,写db仅仅能写.图中读写各一个,仅仅是一个样例,实际须要依据业务来配置读写server比例. nginx tcp proxy实现读写分离.提供仅仅读的port和仅仅写的port.…