win网络编程
文章平均质量分 50
QQ51931373
这个作者很懒,什么都没留下…
展开
-
TCP传输连接有限状态机转换机制
从表10-6中可以看出,TCP Socket服务原语只有8个,比OSI/RM中定义的传输层服务原语还要少,但是在这8种TCP Socket服务原语中,有的原语又可以有不同的状态,如表10-8所示。我们把在TCP传输连接的建立和释放中的通信双方主机的这些状态称之为“有限状态机”(Finite State Machine,FSM)。下面我们来具体阐述一下在TCP传输连接建立、释放过程中这些原语状态的变转载 2013-11-28 16:49:50 · 884 阅读 · 0 评论 -
高性能网络编程4--TCP连接的关闭
TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。为方便阅读,我们可以带着以下5个问题来阅读本文:1、当socket被多进程或者多线程共享时,关闭连接时有何区别?2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理?3、关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎么处理?4、so_linger这转载 2014-05-29 16:55:36 · 726 阅读 · 0 评论 -
高性能网络编程6--reactor反应堆与定时器管理
反应堆开发模型被绝大多数高性能服务器所选择,上一篇所介绍的IO多路复用是它的实现基础。定时触发功能通常是服务器必备组件,反应堆模型往往还不得不将定时器的管理囊括在内。本篇将介绍反应堆模型的特点和用法。首先我们要谈谈,网络编程界为什么需要反应堆?有了IO复用,有了epoll,我们已经可以使服务器并发几十万连接的同时,维持高TPS了,难道这还不够吗?我的答案是,技术层面足够了,转载 2014-05-29 16:57:28 · 750 阅读 · 0 评论 -
跨平台网络数据传输过程中的主机字节顺序和网络字节顺序
大端和小端:大端:在低地址存放高字节,在高地址存放低字节小端:在低地址存放低字节,在高地址存放高字节 注意:地址是左边是低地址,右边是高地址,字节是左边是高字节,右边是低字节。采用大端法存储变量和采用小端法存储变量是根据CPU来决定的。intel的CPU一般采用的是小端法. 比如:short a = 0x1234(两个16进制数字代表一个字节,所以0x12是个字节 0x3原创 2015-05-30 21:33:55 · 3054 阅读 · 2 评论 -
两种高性能I/O设计模式(Reactor/Proactor)的比较
这篇文章探讨并比较两种用于TCP服务器的高性能设计模式。 除了介绍现有的解决方案,还提出了一种更具伸缩性,只需要维护一份代码并且跨平台的解决方案(含代码示例),以及其在不同平台上的微调。 此文还比较了java、c#、c++对各自现有以及提到的解决方案的实现性能。系统I/O 可分为阻塞型, 非阻塞同步型以及非阻塞异步型[1、2]。 阻塞型I/O意味着控制权只到调用操作结束了才会回到调用者转载 2015-07-31 17:45:16 · 498 阅读 · 0 评论 -
零字节WSASend,WSARecv
以下是Windows平台下两个函数的声明:int WSASend( __in SOCKET s, __in LPWSABUF lpBuffers, __in DWORD dwBufferCount, __out LPDWORD lpNumbe原创 2015-09-17 18:06:35 · 868 阅读 · 0 评论 -
closesocket()背后发生的事
应用层代码想要关闭一个TCP连接可以直接调用closesocket(),但是这个函数的行为并不“单纯”,只有了解closesocket()背后的故事,才能对关闭TCP连接有正确的认识。首先明确一点:任何情况下,调用closesocket之后,socket句柄立即失效(一种情况除外,见下文),再对该socket进行操作的API都会失败。但是socket句柄对应的系统资源不一定立即释放,由内核控制原创 2015-10-08 11:12:06 · 3073 阅读 · 0 评论 -
TCP的三次握手(建立连接)和四次挥手(关闭连接)
建立连接: 理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流量控制什么是窗口?连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端接收方发送的确认信息中包含了自己剩余的缓冲区尺寸剩余缓冲区空间的数量叫做窗口2. TCP的流控过程(滑动窗口)TCP(Transmission Control Protocol) 传输控制原创 2015-10-08 11:14:40 · 488 阅读 · 0 评论 -
理解TCP/IP网络栈&编写网络应用(下)
1.摘要这是《翻译:理解TCP/IP网络栈&编写网络应用》的下篇,文章中会通过讲解TCP的代码实现帮助大家理解发送、接收数据的流程,也描述了一些网卡、驱动等网络栈底层的原理。原文地址:原文地址原作者:Hyeongyeop Kim翻译:@蛋疼的axb http://2baxb.me上篇地址:翻译:理解TCP/IP网络栈&编写网络应用(上)2.数据结构以下是翻译 2016-05-17 16:20:14 · 1604 阅读 · 0 评论 -
高性能网络编程2----TCP消息的发送
在上一篇中,我们已经建立好的TCP连接,对应着操作系统分配的1个套接字。操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送方法成功返回时,能保证TCP另一端的主机接收到吗?能保证数据已经发送到网络上了吗?套接字为阻塞或者非阻塞时,发送方法做的事转载 2014-05-29 16:53:35 · 729 阅读 · 0 评论 -
高性能网络编程(一)----accept建立连接
最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心通讯细节。他们更喜欢在OO世界里,去实现某个接口、实现这个组件预定义的各种模式、设置组件参数原创 2014-05-29 16:52:33 · 835 阅读 · 0 评论 -
高性能网络编程7--tcp连接的内存使用
当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突、概念模糊的感觉,如下(sysctl -a命令可以查看这些配置):[cpp转载 2014-05-29 16:58:26 · 861 阅读 · 0 评论 -
套接字I/O模型-完成端口IOCP
“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!但不幸的是,该模型只适用于Windows NT和Windows 2000操作系统。因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千个套接字的时候,而且希望随着系统内安装的CPU数量的增多,应用程序的性能也可以线性提升,才应考虑采用“完成端转载 2013-11-28 16:44:33 · 1089 阅读 · 0 评论 -
通过WinInet上传文件
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include #define BUFFSIZE 500BOOL UseHttpSendReqEx(TCHAR *upFile){ HINTERNET hSession=NULL, hC原创 2013-11-28 16:46:42 · 1911 阅读 · 0 评论 -
通用高性能 Windows Socket 组件 HP-Socket
http://www.oschina.net/p/hp-socket转载 2013-11-28 17:25:16 · 923 阅读 · 0 评论 -
IOCP模型与网络编程
一。前言: 在老师分配任务(“尝试利用IOCP模型写出服务端和客户端的代码”)给我时,脑子一片空白,并不知道什么是IOCP模型,会不会是像软件设计模式里面的工厂模式,装饰模式之类的那些呢?嘿嘿,不过好像是一个挺好玩的东西,挺好奇是什么东西来的,又是一个新知识啦~于是,开始去寻找一大堆的资料,为这个了解做准备,只是呢,有时还是想去找一本书去系统地学习一下,毕竟网络的资料还是有点零散转载 2013-11-28 17:31:16 · 2301 阅读 · 0 评论 -
IOCP工作原理
我已经有两次面试被问到iocp的工作原理了(操作系统的工作原理,不是函数的工作原理),所以觉得很有必要把这个写下来。网上找了半天,写的都是一些函数的实现原理,没提到重点,最近一次面试中技术官告诉我《windows高级编程指南》这本书有提到过,我回来查看了一下,在614页的确有比较详细的讲解,有点不太明白,先把原文引出来吧:总结:完成端口的目标是使在释放线程(运行中的线程)列表中的线程数转载 2013-11-28 17:30:11 · 1210 阅读 · 0 评论 -
Socket函数说明
6.1 库函数综述6.1.1 套接字函数表6.1 Windows Sockets 1.1版本的Berkeley Sockets函数accept() *确认外来连接,并将它与一个立即建立的数据套接字联系起来。原始套接字返回到监听状态。bind()给未命名套接字赋一个本地名。closesoc转载 2014-02-20 15:19:21 · 1037 阅读 · 0 评论 -
使用异步 I/O 大大提高应用程序的性能
学习何时以及如何使用 POSIX AIO API文档选项将此页作为电子邮件发送级别: 中级M. Tim Jones (mtj@mtjones.com), 顾问工程师, Emul转载 2014-02-20 15:20:24 · 783 阅读 · 0 评论 -
高性能网络编程5--IO复用与并发编程
转载自:http://blog.csdn.net/russell_tao/article/details/17119729对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒没有收发任何报文的相对不活跃连接。同时处理多个并行发生事件的连接,简称为并发;同时处理万计、十万计的连接转载 2014-05-29 16:49:04 · 789 阅读 · 0 评论 -
高性能网络编程3----TCP消息的接收
这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动。为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读:1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的?2、若socket为默认的阻塞套接字,此时recv方法传入的len参数,是表示必须超时(S转载 2014-05-29 16:54:38 · 649 阅读 · 0 评论 -
理解TCP/IP网络栈&编写网络应用(上)
1.摘要之前在网上看到了这篇描述tcp网络栈原理的文章,感觉不错,决定抽空把这篇文章翻译一下。一来重新温习一下TCP相关知识,二来练练英文。由于原文太长,这里把文章分成上下两部分,分别对应了原理和代码。 很久没翻译文章了难免有误,建议有能力的同学还是看一下原文。原文地址:原文地址原作者:Hyeongyeop Kim翻译:@蛋疼的axb http://2baxb.me2.概述翻译 2015-07-29 16:36:24 · 506 阅读 · 0 评论