文档章节

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

IT周见智
 IT周见智
发布于 2015/06/05 17:17
字数 684
阅读 8
收藏 0
点赞 0
评论 0

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

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

图1 服务端

图2 客户端

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

图3 服务端监控界面

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

  • Windows Hook编程,主要使用了WH_MOUSE_LL和WH_KEYBOARD_LL两种低级钩子,所以钩子回调方法直接写在了同一个程序中,没有单独写在一个dll中。使用这两种钩子主要是监控客户端的鼠标和键盘信息;
  • 屏幕监控直接截屏发送到服务端,没有使用任何算法,效率不高但可以看,毕竟这个不是重点;
  • 由于要远程操作鼠标和键盘,客户端使用了mouse_event 和 keybd_event两个win32 API,模拟鼠标个键盘输入。

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

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

图4 泵结构

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

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

源码共有4个项目:

  • TCPCommunication:通讯库
  • TCPCommunicationDemoServer:demo1的服务端
  • TCPCommunicationDemoClient:demo1的客户端
  • RemoteDeskServer:demo2的服务端
  • RemoteDeskClient:demo2的客户端

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

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

© 著作权归作者所有

共有 人打赏支持
IT周见智

IT周见智

粉丝 10
博文 61
码字总数 185891
作品 0
西青
TCP/UDP、IP 、Socket、HTTP笔记

1.1 TCP/IP协议组 TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成 IP层负责网络主机的定位,数据传输的路由,由IP地址可以唯一的确定Internet上的一台主机。 TCP层负责面向应...

X堇色
2017/06/26
0
0
Netty干货分享:京东京麦的生产级TCP网关技术实践总结

1、引言 京东的京麦商家后台2014年构建网关,从HTTP网关发展到TCP网关。在2016年重构完成基于Netty4.x+Protobuf3.x实现对接PC和App上下行通信的高可用、高性能、高稳定的TCP长连接网关。 早期...

JackJiang2011
2017/12/01
0
0
python浓缩(16)网络编程

引言:客户/服务器架构 套接字:通信终点 面向连接与无连接套接字 Python 中的网络编程 Socket 模块 套接字对象方法 TCP/IP 客户端和服务器 UDP/IP 客户端和服务器 SocketServer 模块 Twiste...

人生如梦19
2016/04/21
29
0
C# WinForm开发系列 - Socket/WCF/Rometing/Web Services

当今社会是一个信息化社会, 网络越来越多地影响人民的生活, 带来巨大的便利性; 而网络通信在软件开发中占据相当大的比重. Socket/WCF/Rometing/Web Services 各种技术纷至踏来, 应用广泛; 而...

长征2号
2017/08/11
0
0
chapter 16 网络编程

套接字:通讯端点 什么是套接字? 书上说的端口是数据结构和I/O缓存区”是指硬件端口,网络编程里的端口可以理解为应用程序的ID。 说得形象点,套接字就类似我们人类的门 我们打开门,通过门...

happyliferao
2015/03/16
0
0
Linux多线程并发服务器编程(线程池,FTP服务器)

分享网盘下载:https://pan.baidu.com/s/1gfNCcXt 密码: irfk 内容简介 本课程从最基础的进程、线程概念讲起逐步深入,通过理论与实践结合的方式,使学员快说掌握linux多线程网络编程技术,并...

人气王子333
06/26
0
0
IM消息送达保证机制实现(二):保证离线消息的可靠投递

1、前言 本文的上篇《IM消息送达保证机制实现(一):保证在线实时消息的可靠投递》中,我们讨论了在线实时消息的投递可以通过应用层的确认、发送方的超时重传、接收方的去重等手段来保证业务层...

JackJiang-
2016/11/18
894
0
现代IM系统中聊天消息的同步和存储方案探讨

本文原作者:木洛,阿里云高级技术专家,内容有删减和修订,感谢原作者。 1、前言 IM全称是『Instant Messaging』,中文名是即时通讯。在这个高度信息化的移动互联网时代,生活中IM类产品已经...

JackJiang2011
2017/11/24
0
0
Rmote学习笔记-zyh

RMI的概念: RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的...

颖辉小居
2016/11/13
8
0
如何选择即时通讯应用的数据传输格式

前言 即时通讯应用(包括IM聊天应用、实时消息推送应用等)开发的前期技术选型时,关于数据传输格式的选择,在即时通讯开发者同行的眼里,是个极富争议话题。 精略分析一下,大概的原因在于:...

JackJiang-
2016/08/04
372
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android LogUtil 日志优化 调试的时候打印 点击跳转

打印日志的时候,可以点击跳转 LogUtil.java public class LogUtil { private static boolean IS_DEBUG = BuildConfig.DEBUG; public static void i(String tag, String message) {......

Jay_kyzg
12分钟前
0
0
人工智能你必须掌握的32个算法(二)归并排序算法

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子...

木头释然
14分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
37分钟前
1
0
流利阅读笔记27-20180716待学习

生了娃照样能打,两位母亲温网会师 Lala 2018-07-16 1.今日导读 现今在生儿育女后回归事业的母亲们已经非常多见,但是很少有人想到,以高强度运动与竞争激烈为特色的竞技体育项目也会有 work...

aibinxiao
38分钟前
4
0
Guava 源码分析(Cache 原理【二阶段】)

前言 在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。 文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。 在开始之前...

crossoverJie
50分钟前
0
0
OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
今天
574
19
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部