网络通信
wangluozhangleilei
还好一路有你!
展开
-
WSAEventSelect模型中FD_READ 网络事件的处理
FD_READ: FD_READ 事件非常容易掌握. 当有数据发送过来时, WinSock会以FD_READ事件通知你, 对于每一个FD_READ事件,调用recv()即可读取到数据,如果传递给recv()的缓冲区不足以一次容纳所有数据,还有,不一定每一次调用recv()都会接收到一个完整的数据包, 因为数据可能不会一次性全部发送过来. 所以在开始处理接收到的数据之前, 最好对接收到原创 2013-06-05 22:27:01 · 1859 阅读 · 0 评论 -
屏幕监控
屏幕监控是远程控制中的一项主要功能,有了此功能能使操作远程电脑像操作本地电脑一样方便。实现方法很多,原理就是不断地把远程电脑屏幕的图像发送到本地电脑,本地电脑把图像显示出来。最早期的实现方法只是不断地传送bmp图像,这样做不仅传输延时很大,且cpu特别是服务端的cpu占用率很大。为了解决以上两个问题,可以采用传输屏幕变化的部分,传输过程中压缩解压缩的方法。传输屏幕变化的部分:应转载 2012-10-03 16:59:10 · 2853 阅读 · 0 评论 -
WSAAsyncSelect发送和接收数据
原文:http://www.cppblog.com/totti1006/archive/2007/08/16/30155.html我本想把发送和接收分开作为两部分,但是最后我决定只略微解释一下 FD_READ ,留下更多的时间来说明更复杂的 FD_WRITE , FD_READ 事件非常容易掌握. 当有数据发送过来时, WinSock 会以 FD_READ 事件通知你, 对于每一个 FD_转载 2012-09-01 16:18:44 · 944 阅读 · 0 评论 -
Udp Select
最近的项目开发中,网络部分的实现采用自定义的通讯协议,为了保证服务器安 全稳定运行,保证数据发送速度(相对于TCP来说),采用UDP协议。 UDP 和 TCP的优劣在此不再重复。在采用UDP协议时候, 问题也就跟着来了。UDP协议的本质决定了数据包的不可靠传输,我们无法知道数据包何时会被遗失,所以采用UDP传输信息,就必须自己控制和解决丢包、超时、重传问题。这是一个很久以来一直都在讨论的且未得转载 2012-08-20 19:35:08 · 2975 阅读 · 1 评论 -
select 客户端
//////////////////////////////////////////////// TCP Client 非阻塞模式设定//////////////////////////////////////////////#define CONNECT_IP "127.0.0.1"#define CONNECT_PORT 1207#defin转载 2012-08-19 15:55:57 · 1042 阅读 · 0 评论 -
Windows I/O模型、同步/异步、阻塞/非阻塞
同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处转载 2012-08-15 20:49:46 · 1266 阅读 · 0 评论 -
select模型的实现
服务端:#include "iostream.h"#include "winsock2.h"#pragma comment (lib,"ws2_32.lib")#define DEFAULT_PORT 4000 //默认端口号void WINAPI SendOut();char info[255];翻译 2012-08-01 20:30:21 · 611 阅读 · 0 评论 -
TCP连接建立与关闭
TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的。建立一个 TCP 连接 TCP使用三次握手 ( three-way handshake ) 协议来建立连接,图 3-10 描述了三次握手的报文序列。这三次握手为:请求端(通常称为客户)发送一个 SYN 报文转载 2012-07-26 16:45:00 · 816 阅读 · 0 评论 -
TCP连接关闭总结
由于涉及面太广,只作简单整理,有兴趣的可参考《UNIX Networking Programming》volum 1, Section 5.7, 5.12, 5.14, 5.15, 6.6 以及7.5 SO_LINGER选项。以一个简单的echo服务器为例,客户端从标准输入读入字符,发送给服务器,服务器收到后再原样返回,客户端收到后打印到标准输出。那么,关于套接字的关闭有以下几种情转载 2012-07-26 16:46:55 · 1187 阅读 · 0 评论 -
四个棘手的IOCP编码问题和解决方法
使用IOCP时会出现一些问题,其中有一些不是很直观的。在使用IOCP的多线程编程中,一个线程函数的控制流程不是笔直的,因为在线程和通讯直接没有关系。在这一章节中,我们将描述四个不同的问题,可能在使用IOCP开发客户端/服务器应用程序时会出现,分别是:The WSAENOBUFS error problem.(WSAENOBUFS错误问题) The package reordering pr转载 2012-09-22 20:56:08 · 1508 阅读 · 0 评论 -
IOCP完成端口详解
完成端口详解(1) 通常要开发网络应用程序并不是一件轻松的事情,不过,实际上只要掌握几个关键的原则也就可以了——创建和连接一个套接字,尝试进行连接,然后收发数据。真正难的是要写出一个可以接纳少则一个,多则数千个连接的网络应用程序。本文将讨论如何通过Winsock2在Windows NT 和 Windows 2000上开发高扩展能力的Winsock应用程序。文章主要的焦点在客转载 2012-09-23 21:19:51 · 1278 阅读 · 0 评论 -
屏幕传输算法
发一下以前研究过的屏幕传输算法,垫垫底。屏幕监控是远程控制中的一项主要功能,有了此功能能使操作远程电脑像操作本地电脑一样方便。实现方法很多,原理就是不断地把远程电脑屏幕的图像发送到本地电脑,本地电脑把图像显示出来。最早期的实现方法只是不断地传送bmp图像,这样做不仅传输延时很大,且cpu特别是服务端的cpu占用率很大。为了解决以上两个问题,可以采用传输屏幕变化的部分,传输过程中转载 2013-02-26 14:47:35 · 5580 阅读 · 1 评论 -
mstsc VS vnc : 远程桌面最快的原因在于RDP协议
一番讨论,才明白为什么windows自带的远程桌面mstsc比Ultr***NC要快。协议,还是协议。从控制命令上入手,传送GDI命令参数,而不是屏幕的数值。绘图都由Client端实时完成。Server几乎是idle的,仅传送命令参数。Microsoft的远程桌面协议(Remote Desktop Protocol,简称RDP)它仅传输服务器所显示的对象的属性变化的控制值,实现快速远程转载 2013-01-21 20:41:34 · 3393 阅读 · 0 评论 -
gh0st的 IOCP
这个是 gh0st 里用的IOCP类,但是客户端不是使用IOCP的,只有服务器端是使用的 IOCP类,他的这个IOCP有几点是很值得我们学习的,首先就是自定义协议,通过自定义协议我们可以知道发送端发送的包的确切大小和其他的一些信息,从而解决的TCP协议传输数据的一些常见问题,如 根据Nagel算法,发送时间间隔很小的2个数据包会被合并到一起发送,我称这种问题就做“粘包”,不知道别人怎么叫的,这时如转载 2012-11-20 16:22:11 · 3501 阅读 · 2 评论 -
Gh0st通信协议解析(3) .send数据包大概是域名拦截关键
看到这里大家对gh0st的iocp通讯有一定的了解吧当顺利的连接到主控端之后,按照程序的一个执行逻辑,被控端会将本机上的一些反映本机状态的一个信息发送到主控端,这个过程其实涉及到了被控端与主控端间信息的交互过程。*******************************************************************************转载 2012-11-20 16:19:42 · 3220 阅读 · 0 评论 -
Gh0st通信协议解析(2)
原文链接:http://blog.renren.com/blog/bp/Q78RzCJjOx从被控端主动去连接主控端开始谈起。世间万事万物有始有终,宇宙环宇的动力起点就是上帝的那一推之力。当然,主控端与被控端的交互总是从被控端主动连接到主控端开始的,让我们从发起连接这个引爆点谈起……**********************************************转载 2012-11-20 16:18:55 · 1604 阅读 · 0 评论 -
Gh0st通信协议解析(1)
界面篇等我先搞完这个通信协议解析再说,要不我老觉得自己是在扯淡。在这里我也给自己这两天搞的协议解析找个网络存储做一下备份。Gh0st通信协议解析(1)正所谓蛇打七寸,今天我们对gh0st的通信协议进行一个完整的解析,看看gh0st这款远控的核心技术的来龙去脉。**********************************************************转载 2012-11-20 16:17:42 · 2077 阅读 · 0 评论 -
一个简单的IOCP(IO完成端口)服务器/客户端类
作者: Amin Gholiha 翻译:高庆余文章来源: [url]http://www.codeproject.com/KB/IP/iocp_server_client.aspx[/url] 前言:源代码使用比较高级的 IOCP 技术,它能够有效的为多个客户端服务,利用 IOCP 编程 API ,它也提供了一些实际 问题的解决办法,并且提供了一个简单的带回复的文件传输的客户端 /转载 2012-11-18 13:19:52 · 1270 阅读 · 0 评论 -
IOCP
网络程序入门后的第一件是就是学会选择合适的io模型,这对于一个网络程序来说非常重要,特别是性能。当前Windows支持的各种Socket I/O模型如下:select模型WSAAsyncSelect模型WSAEventSelect模型Overlapped I/O 事件通知模型Overlapped I/O 完成例程模型IOCP模型转载 2012-11-14 16:39:26 · 790 阅读 · 0 评论 -
通过socket获取对方ip地址
struct sockaddr_in sa; int len = sizeof(sa); if(!getpeername(sockfd, (struct sockaddr *)&sa, &len)) { printf( "对方IP:%s ", inet_ntoa(sa.sin_addr)); printf( "对方PORT:%d "原创 2012-07-25 20:13:29 · 11243 阅读 · 0 评论 -
缓冲区大小及限制
TCP输出下图展示了应用进程写数据到TCP套接口的过程。 每一个TCP套接口有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小。当应用程序调用write时,内核从应用程序进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用程序的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据转载 2012-07-24 10:23:19 · 4869 阅读 · 0 评论 -
Socket send函数和recv函数详解
send函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端转载 2012-07-24 10:34:32 · 692 阅读 · 0 评论 -
Windows系统编程之异步I/O和完成端口
Windows系统编程之异步I/O和完成端口【作者】北极星2003【来源】看雪技术论坛(bbs.pediy.com) 【时间】2006年7月1日一、 同步I/O和异步I/O在介绍这部分内容之前先来认识下“异步I/O”。 说起异步IO,很容易联想到同步I/O,对于同一个I/O对象句柄在同一时刻只允许一个I/O操作,其原理如下图所示: 显然,当内核转载 2012-06-30 21:07:42 · 707 阅读 · 0 评论 -
(转)WSAIoctl Function
套接字选项和I/O控制命令 套接字一旦建立,通过套接字选项和I/O控制命令对各种属性进行操作,便可对套接字的行为产生影响。有的选项只用于信息的返回,而有的选项则可在应用程序中影响套接字的行为。I / O控制命令肯定会对套接字的行为产生影响。 下 面着重讨论四个Winsock函数:getsockopt、setsocketopt、ioctlsocket和WSAIoctl转载 2012-07-11 20:43:59 · 1317 阅读 · 0 评论 -
WinSocket模型的探讨——Overlapped模型(一)(转)
重叠模型是Windows里一种重要的 I/O 模型,可以有效率的实现一些 I/O 操作,譬如文件读写、Socket读写等,在这里我们一起来研究一下重叠模型,看看它究竟为何方神圣。这篇文章分为以下几部分来说明:重叠模型的概念容易碰到的一些问题重叠模型的基本编程方法(accept 和 AcceptEx )突破64个事件的等待限制例程好了,下面就让我们一起来学习一下重叠模型。转载 2012-07-08 16:02:04 · 1112 阅读 · 0 评论 -
网络游戏通讯模型初探
序言 网络游戏,作为游戏与网络有机结合的产物,把玩家带入了新的娱乐领域。网络游戏在中国开始发展至今也仅有3,4年的历史,跟已经拥有几十年开发历史的单机游戏相比,网络游戏还是非常年轻的。当然,它的形成也是根据历史变化而产生的可以说没有互联网的兴起,也就没有网络游戏的诞生。作为新兴产物,网络游戏的开发对广大开发者来说更加神秘,对于一个未知领域,开发者可能更需要了解的是网络游戏与普通单转载 2012-07-04 21:13:35 · 1021 阅读 · 0 评论 -
FTP协议浅析
FTP协议浅析Author:Leen今日需要用到FTP上传文件,就研读了一下FTP协议。虽然MFC中有 CFtpConnection 等类 使用起来很简易,但是不方便让我来理解FTP传输文件的过程,P传输解FT文件的过程,而且据说无法在WINCE上使用该类。FTP使用两个端口,21作为命令传输端口使用20一般作为主动传输时使用,被动传输时服务器开放端口,并将转载 2012-06-15 12:38:45 · 1232 阅读 · 0 评论 -
基于Socket的多线程和异步非阻塞模式编程
刚开始接触socket的编程的时候,遇到了很多的问题,费了很大劲搞懂。其实往往都是一些比较基本的知识,但是都是很重要的,只要对其熟练的掌握后,相信对基于网络的编程会有很大的提高,呵呵。 就拿基于C/S结构的例子来说,我们先看看服务器和客户端的流程(异常处理就省略了): 服务器: //初始化转载 2012-06-07 19:55:30 · 1307 阅读 · 0 评论 -
TCP同步与异步及阻塞模式,多线程+阻塞模式,非阻塞模式简单介绍
首先我简单介绍一下同步TCP编程 与异步TCP编程。在服务端我们通常用一个TcpListener来监听一个IP和端口。客户端来一个请求的连接,在服务端可以用同步的方式来接收,也可以用异步的方式去接收。比如:TcpListene server = new TcpListener(IPAddress.Parse("127.0.0.1"), port);TcpClient tc转载 2012-06-08 10:29:02 · 2375 阅读 · 0 评论 -
一个ip多端口通信
服务端:#include #include #pragma comment(lib,"ws2_32.lib")#include //=========基于TCP聊天程序=====//服务器端void main(){//加载WinSock库//定义一个WORD类型的变量WORD wVersionRequested;WSADATA wsaData;i原创 2012-06-05 17:19:15 · 2252 阅读 · 0 评论 -
WinSocket模型的探讨——select模型
转自:http://blog.csdn.net/dylgsy/archive/2007/01/18/1487143.aspxSOCKET模型的出现是为了解决“一个客户端一线程”的问题,为了WINDOWS的线程切换不要太频繁,我们可以使用WINDOWS的SOCKET模型。但在论坛里又看到了一些文章说现在的计算机硬件相当发达,成万的线程切换根本不是什么问题。无论怎么样,既然这些模型被MS发明了转载 2012-07-12 15:45:12 · 890 阅读 · 0 评论 -
基于select I/O模型的远程目录浏览与多线程文件下载
发布日期:2007-02-08 11:19浏览次数:290次标 签:ATL文章评分:5.0操 作:下载源文件打印李建成称号:未设置简介:...文章概要:本文详细介绍了用select模型配合多线程来实现远程目录浏览与多线程文件下载。转载 2012-07-13 09:26:21 · 1688 阅读 · 0 评论 -
socket的发送与接收缓冲区(转)
应用程序可通过调用send(write, sendmsg等)利用tcp socket向网络发送应用数据,而tcp/ip协议栈再通过网络设备接口把已经组织成struct sk_buff的应用数据(tcp数据报)真正发送到网络上,由于应用程序调用send的速度跟网络介质发送数据的速度存在差异,所以,一部分应用数据被组织成tcp数据报之后,会缓存在tcp socket的发送缓存队列中,等待网络空闲时转载 2012-07-24 10:18:36 · 1974 阅读 · 0 评论 -
QQ通信原理概述
一、登陆。 不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。二、聊天消息通转载 2012-07-20 21:46:00 · 1402 阅读 · 0 评论 -
select设置超时------(1)使用说明.另附带setsockopt使用讲解
超时这个问题微软开发者在新版本的编译器中如VS2008,就在recv参数4中添加了MSG_WAITALL,这个东西在低版本里是看不到的.如VS2003.你可以用VS2003新建1个win32控制台应用程序,VS2008新建1个win32控制台应用程序,recv第4个参数MSG_WAITALL,在08编译正常,而在03会提示 error C2065: “MSG_WAITALL” : 未声明的转载 2012-07-19 10:16:44 · 3225 阅读 · 0 评论 -
SELECT超时小结
目前各平台通用的设置socket connect超时的办法是通过select(),具体方法如下1.建立socket;2.将该socket设置为非阻塞模式;3.调用connect();4.使用select()检查该socket描述符是否可写;5.根据select()返回的结果判断connect()结果;6.将socket设回阻塞模式。转载 2012-07-19 10:13:11 · 2113 阅读 · 0 评论 -
套接字模式—阻塞模式开发
1、阻塞模式概念 当使用socket()函数和WSASocket()函数创建的套接字时,默认都是阻塞模式的。阻塞模式是指套接字在执行操作时,调用函数在没有完成操作之前不会立即返回的工作模式。这意味着当调用Windows Sockets API不能立即完成时,线程处于等待窗台,直到操作完成。 并不是所有的Windows Sockets API以阻塞套接字为参转载 2012-08-02 10:51:30 · 928 阅读 · 0 评论 -
VC中获取主机名和IP地址的方法
1、创建一个对话框应用程序,加载windows socket的动态连接库,方法为在对话框的InitDialog函数中增加如下代码: WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2,0); err = WSAStartup(wVersionRequested,&wsa转载 2012-07-17 16:47:06 · 1234 阅读 · 0 评论 -
socket中accept函数的更深理解
按: 网络编程也 进行了一段时间了,最近在看ruby的时候,发现 基本的套接字函数理解都有问题。要反思啊 =================================================BSD中的 socket编程中 ,tcp 服务器端 accept的原型是这样的int accept(int sockfd, void *addr, int *add转载 2012-07-03 15:15:25 · 1978 阅读 · 0 评论 -
选择(select)模型
选择(select)模型是Winsock中最常见的 I/O模型。核心便是利用 select 函数,实现对 I/O的管理!利用 select 函数来判断某Socket上是否有数据可读,或者能否向一个套接字写入数据,防止程序在Socket处于阻塞模式中时,在一次 I/O 调用(如send或recv、accept等)过程中,被迫进入“锁定”状态;同时防止在套接字处于非阻塞模式中时,产生WSAEWOULD转载 2012-07-13 09:46:15 · 723 阅读 · 0 评论