基于“泵”的TCP通讯(接上篇)

上一篇博客中说了基于“泵”的UDP通讯,附上了一个Demo,模拟飞鸽传书的功能,功能不太完善,主要是为了说明“泵”在编程中的应用。本篇文章我再附上一个关于TCP通讯的两个Demo,也都采用了“泵”模式:

1.由于我把通讯部分的代码写在了一个dll中,这个demo只是简单的应用这个dll,主要完成发送字符串、字节流、可序列化对象等功能,效果图如下:

图1 服务端

图2 客户端

2. 一个简单的屏幕监控程序,主要有屏幕监控、键盘鼠标监控、键盘鼠标控制等功能。监控服务端可以同时监控多个客户端,效果图如下:

图3 服务端监控界面

这个demo稍微复杂一点,各功能实现如下:

1)  Windows Hook编程,主要使用了WH_MOUSE_LL和WH_KEYBOARD_LL两种低级钩子,所以钩子回调方法直接写在了同一个程序中,没有单独写在一个dll中。使用这两种钩子主要是监控客户端的鼠标和键盘信息;

2)  屏幕监控直接截屏发送到服务端,没有使用任何算法,效率不高但可以看,毕竟这个不是重点;

3)  由于要远程操作鼠标和键盘,客户端使用了mouse_event 和 keybd_event两个win32 API,模拟鼠标个键盘输入。

双击监控屏幕控制远程主机屏幕。

再说一下通讯部分的原理,其实它跟UDP中的结构差不多,不同的是UDP中是一对一的,“泵”结构只有一个,借用上一篇博客中的插图:

图4 泵结构

TCP中的客户端跟上图差不多,服务端就稍微有点不同,因为它需要接收多个客户端的数据,因此“数据接收泵”、“数据分析泵”都有多个,每一个都跟上图类似。

本TCP通讯库没有做心跳检测处理,因此在断网和断电等情况下,不会激发相应事件通知你掉线。该功能需要你自己实现,比如每隔一定时间给双方发送一个信息。

源码共有4个项目:

1)TCPCommunication:通讯库

2)TCPCommunicationDemoServer:demo1的服务端

3)TCPCommunicationDemoClient:demo1的客户端

4)RemoteDeskServer:demo2的服务端

5)RemoteDeskClient:demo2的客户端

第二个Demo性能有待优化(可以将钩子部分代码注释掉,不再监控客户主机的键盘鼠标输入)。VS2008 Win7编译通过,源码下载地址:http://files.cnblogs.com/xiaozhi_5638/TCPCommunication_Source.rar

希望对各位有帮助,谢谢。

基于“泵”的TCP通讯(接上篇)的更多相关文章

  1. .Net开发笔记(十五) 基于“泵”的TCP通讯(接上篇)

    上一篇博客中说了基于“泵”的UDP通讯,附上了一个Demo,模拟飞鸽传书的功能,功能不太完善,主要是为了说明“泵”在编程中的应用.本篇文章我再附上一个关于TCP通讯的两个Demo,也都采用了“泵”模式 ...

  2. wp8使用Beetle.NetPackage实现基于TCP通讯的订单查询

    在新版本的Beetle.NetPackage中提供了对Protobuf和Controller的支持,所以在WP8下使用Beetle.NetPackage进行基于TCP的数据交互则一件非常简单事情.下面 ...

  3. 基于STM32和W5500的Modbus TCP通讯

    在最近的一个项目中需要实现Modbus TCP通讯,而选用的硬件平台则是STM32F103和W5500,软件平台则选用IAR EWAR6.4来实现. 1.移植千的准备工作 为了实现Modbus TCP ...

  4. 基于QTcpSocket和QTcpServer的Tcp通讯以及QDataStream序列化数据

    最近要在QT下开发Tcp通讯,发送序列化数据以便于接收. 这里涉及到几个问题: 1.QTcpSocket.QTcpServer的通讯 2.QDataStream序列化数据 多的不说,直接上干货!!! ...

  5. (二): 基于ZeroMQ的实时通讯平台

    基于ZeroMQ的实时通讯平台 上篇:C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework)----(一):整体介绍 通讯平台作为 ...

  6. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  7. C#TCP通讯框架

    开源的C#TCP通讯框架 原来收费的TCP通讯框架开源了,这是一款国外的开源TCP通信框架,使用了一段时间,感觉不错,介绍给大家 框架名称是networkcomms 作者开发了5年多,目前已经停止开发 ...

  8. 推荐一款开源的C#TCP通讯框架

    原来收费的TCP通讯框架开源了,这是一款国外的开源TCP通信框架,使用了一段时间,感觉不错,介绍给大家 框架名称是networkcomms 作者开发了5年多,目前已经停止开发,对于中小型的应用场景,够 ...

  9. java基础55 UDP通讯协议和TCP通讯协议

    本文知识点(目录): 1.概述    2.UDP通讯协议    3.TCPP通讯协议 1.概述 1.在java中网络通讯作为Socket(插座)通讯,要求两台都必须安装socket.    2.不同的 ...

随机推荐

  1. linux-ubuntu关闭防火墙

    SYNOPSIS iptables [-t table] {-A|-C|-D} chain rule-specification ip6tables [-t table] {-A|-C|-D} cha ...

  2. HDU 4793 2013 Changsha Regional Collision[简单的平面几何]

    圆形奖章给定半径的半径和圆形区域.另一个硬币的半径,然后在桌面上平稳.给定硬币的速(的大小和方向,vx,vy)和坐标(奖牌同心圆形区域,圆和心脏为源),Q币在一个圆形区域和多少下滑(不管是什么圆形区域 ...

  3. 带格式分离两个RichEditControl的文本

    using( RichEditControl selector = new RichEditControl() { RtfText = richTextFromHtml } ) { DocumentR ...

  4. [CLR via C#]7. 常量和字段

    原文:[CLR via C#]7. 常量和字段 7.1 常量 常量(constant)是一个特殊的值,它是一个从不变化的值. 在定义常量时,它的值必须在编译时确定.确定之后,编译器将常量的值保存到程序 ...

  5. 基于C++ 苹果apns消息推送实现(2)

    1.该模块的用途C++ 和 Openssl 代码 它实现了一个简单的apns顾客 2.配套文件:基于boost 的苹果apns消息推送实现(1) 3.最初使用的sslv23/sslv2/sslv3仅仅 ...

  6. jQuery.extend()源码解读

    // extend方法为jQuery对象和init对象的prototype扩展方法// 同时具有独立的扩展普通对象的功能jQuery.extend = jQuery.fn.extend = funct ...

  7. Windows下一个ROracle安装与使用

    ROracle一个简短的引论: ROracle这是R连接到接入Oracle数据库DBI(Oracledatabase interface)介面.这是基于OCI一个DBI兼容Oracle司机. 具体见说 ...

  8. 判断文件是否存在,不存在创建文件&&判断文件夹是否存在,不存在创建文件夹

    1.判断文件是否存在,不存在创建文件 File file=new File("C:\\Users\\QPING\\Desktop\\JavaScript\\2.htm"); if( ...

  9. php中ssl开发的若干问题

    最近利用php开发ssl的相关功能,由于第一次做相关的事情,遇到了很多问题,庆幸的是最终都顺利解决了.不过相关的资料很少,都是综合了国内外的相关信息才解决的.现在整理一下,方便后来者遇到问题时解决. ...

  10. PDFBox之文档创建

    1.创建一个空的PDF 下面的小例子表示如何使用PDFBox来创建一个新的PDF文档. // 创建一个空的文档 PDDocument document = new PDDocument(); // 创 ...