文章分类 -  Scoket

摘要:相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。因此在这里详细解释一下这两个过程。TCP三次握手所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 阅读全文
posted @ 2014-01-25 20:25 Net-Spider 阅读(187) 评论(0) 推荐(0)
摘要:TCP通过滑动窗口的概念来进行流量控制。设想在发送端发送数据的速度很快而接收端接收速度却很慢的情况下,为了保证数据不丢失,显然需要进行流量控制, 协调好通信双方的工作节奏。所谓滑动窗口,可以理解成接收端所能提供的缓冲区大小。TCP利用一个滑动的窗口来告诉发送端对它所发送的数据能提供多大的缓 冲区。由于窗口由16位bit所定义,所以接收端TCP 能最大提供65535个字节的缓冲。由此,可以利用窗口大小和第一个数据的序列号计算出最大可接收的数据序列号。 滑动窗口本质上是描述接受方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。如果发送方收到接受方的窗口大小为0的T 阅读全文
posted @ 2013-11-04 18:04 Net-Spider 阅读(401) 评论(0) 推荐(0)
摘要:在Socket应用开发中,还有一个话题是讨论的比较多的,那就是数据接收后如何处理的问题。这也是一个令刚接触Socket开发的人很头疼的问题。因为Socket的TCP通 讯中有一个“粘包”的现象,既:大多数时候发送端多次发送的小数据包会被连在一起被接收端同时接收到,多个小包被组成一个大包被接收。有时候一个大数据包 又会被拆成多个小数据包发送。这样就存在一个将数据包拆分和重新组合的问题。那么如何去处理这个问题呢?这就是我今天要讲的通讯协议。所谓的协议就是通讯双方协商并制定好要传送的数据的结构与格式。并按制定好的格式去组合与分析数据。从而使数据得以被准确的理解和处理。那么我们如何去制定通讯协议呢?很 阅读全文
posted @ 2013-11-04 17:25 Net-Spider 阅读(714) 评论(0) 推荐(0)
摘要:其实这篇文章在一年前就应该写了,不过一直觉得自己没空,一拖就拖到现在。先对大家说句对不起了。在之前的文章中,我们讲了如何在.NET 2.0下面开发Socket项目。其中的异步Socket让我们得以很轻松的在.NET中开发高性能服务端应用。但是,在实际应用中我们还是发现了一些问题的存在,如:我们在每一次操作的过程中都要创建一个IAsyncResult上下文对象,如果数据通讯很频繁的话,会导致大量的IAsyncResult对象被创建,大大的增加了垃圾回收器的工作量,从而降低了整个应用的效率。在.NET 3.5中,这个麻烦已经被解决了,在3.5 版本中,Socket定义了一些新的方法。这些方法不要求 阅读全文
posted @ 2013-11-04 17:22 Net-Spider 阅读(244) 评论(0) 推荐(0)
摘要:声明:除CSDN外的任何媒体转载必须注明作者以及“转载自CSDN”。本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教。 一:select模型 二:WSAAsyncSelect模型 三:WSAEventSelect模型 四:Overlapped I/O 事件通知模型 五:Overlapped I/O 完成例程模型 六:IOCP模型 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们的信箱里。 这和Socket模型非常类似。下面我就以老陈接收信件为例讲解Socket I/O模型~~~一:select模 阅读全文
posted @ 2013-11-04 17:17 Net-Spider 阅读(176) 评论(0) 推荐(0)
摘要:Issue description:If you use TcpListener and TcpClient to communicate, it will produce more Time_Wait status in socket pipe. I get the TcpListener and TcpClient sample from MSDNhttp://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspxhttp://msdn.microsoft.com/en-us/library/system.net 阅读全文
posted @ 2013-05-30 11:34 Net-Spider 阅读(190) 评论(0) 推荐(0)
摘要:当客户端启动到服务器的 TCP/IP 套接字连接时,客户端通常连接到服务器上的特定端口,并请求服务器通过临时(或暂时)TCP 或 UDP 端口进行响应。在 Windows Server 2003 和 Windows XP 中,客户端应用程序所使用的临时端口的默认范围为 1025 到 5000。在某些情况下,有可能耗尽默认范围的可用端口。 TCP/IP 端口耗尽的症状随客户端应用程序的不同而不同,但通常都表现为显示网络连接失败错误。若要确定网络连接失败是否是由 TCP/IP 端口耗尽造成的,请在客户端计算机上执行以下步骤: 在运行 Windows XP 或 Windows Server 20.. 阅读全文
posted @ 2013-05-20 03:13 Net-Spider 阅读(309) 评论(0) 推荐(0)
摘要:服务器端TCPServer1、使用的通讯通道:socket2、用到的基本功能:Bind,Listen,BeginAcceptEndAcceptBeginReceiveEndReceive3、函数参数说明Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);新建socket所使用的参数均为系统预定义的量,直接选取使用。listener.Bind(localEndPoint);localEndPoint 表示一个定义完整的终端,包括IP和端口信息。//new IPEndPoin 阅读全文
posted @ 2013-05-20 02:44 Net-Spider 阅读(315) 评论(0) 推荐(0)
摘要:如果需要接收多个文件的时候,不能重复调用Socket.Bind(ipep),这样会出现socket异常的,因为socket已经监听了一个端口了,端口不能被重复使用。发送端。。client private void button2_Click(object sender, EventArgs e) { this.button2.Enabled = false; Thread TempThread = new Thread(new ThreadStart(this.StartSend)); ... 阅读全文
posted @ 2013-05-20 02:34 Net-Spider 阅读(724) 评论(0) 推荐(0)
摘要:<一> IOCP 实现步骤 如果懂得了 IOCP 的工作原理,它实现起来是很简单的。它的实现步骤如下:1. 创建好 IOCP2. 创建 Socket ( socket 可以是由 Accept 得到)3. 将 Socket 关联到 IOCP4. socket 向 IOCP 提交各种所需请求5. IOCP 操作完成之后将结果返回给 socket6. 重复步骤 3 和 4 ,直到 socket 关闭它就那么几个步骤,但实现起来需要不少的代码。以下就以创建一个客户端的 socket 为例,先做部分的讲解。这里主要讲解原理,函数的参数和返回值先忽略。1 . // 创建 ... 阅读全文
posted @ 2013-05-17 01:03 Net-Spider 阅读(1262) 评论(0) 推荐(0)
摘要:上一篇文章《用SocketAsyncEventArgs+池+线程构建服务器“推”》给大家展示了一下如何使用已封装好了的类库,这回再把源代码贴出来,大家讨论一下做为高性能的服务器“推”或是Socket服务器这个方案是否合适,或是有什么改进的地方。首先谢谢您的阅读。 还是先把类图贴出来,免得大家还得去上一篇文章里看类图: 再依次贴每个类的代码和说明: 1.MySocketAsyncEventArgs类:这个类的主要目的就是继承 SocketAsyncEventArgs类,让它作为封装连接的类代替传统上的SocketAsyncEventArgs类,当然它扩展出UID和 Property两个属... 阅读全文
posted @ 2013-05-16 23:48 Net-Spider 阅读(552) 评论(1) 推荐(0)
摘要:说到服务器推技术,可谓是让人们又爱又恨,爱的是它能实现特殊的功能效果,恨的是它性能太低实现起来太复杂。大家知道Framework里有Socket、异步Socket,但实现起来只能是权且观赏,要真实际应用却问题重重,于是我拜读了园子里的很多大侠们的文章,从中找到了一些线索,于是参考兼独创弄出来一套方案。好,进入正题。先来个引子。要做服务器推,当然要保证几点:连接数、性能、稳定性、灵活性,不能一台服务器只能连个百八十个用户,也不能一推就弄个CPU占用率100%甚至直接down掉,稳定嘛,自然就要保证服务器不能因为用户的变化而断开服务,而且还要有判断用户的能力,不能那边用户断开半个小时了,你服务器还 阅读全文
posted @ 2013-05-16 23:46 Net-Spider 阅读(654) 评论(0) 推荐(0)
摘要:在实际项目开发中,业务逻辑层的处理速度往往很快,特别是在开发Socket通信服务的时候,网络传输很快,但是一旦加上数据库操作,性能一落千 丈,数据库操作的效率往往成为一个系统整体性能的瓶颈。面对这问题,我们怎么办呢?好,下面我就为大家介绍一种方法:构建SQL池,分离业务逻辑层和数据 访问层,让业务逻辑层从低效的数据库操作解脱,以提高系统整体性能。(一)SQL池 SQL池是SQL容器,用于存放业务逻辑层抛过来的SQL语句。SQL池主要提供以下几种方法:1)internal string Pop(),从池中取出SQL。2)internal void Push(string item),增加一个S. 阅读全文
posted @ 2013-05-16 23:32 Net-Spider 阅读(161) 评论(0) 推荐(0)
摘要:讲udp应用之前,我先简单说一下udp与tcp之间的区别。udp与tcp之间的区别udp tcp容易丢包 保证数据正确性程序结构简单 程序结构复杂流模式数据模式对系统资源要求少对系统资源要求多无连接 连接数据是无序的数据有序接下来简单讲一下udp收发包的应用(点对点的应用):一,发包: 1,首先创建一个网络端点:IPEndPoint ipep = new IPEndPoint(IPAdress.Parse(ip), 9050); 此类有两个参数:第一个是接收端的IP,第二个是接收端的端口号。 2,接下来创建一个UdpClient对象:UdpClient udpClient=new Ud... 阅读全文
posted @ 2012-12-10 20:39 Net-Spider 阅读(464) 评论(0) 推荐(0)
摘要:阅读全文并下载全部代码:http://www.cckan.net/forum.php?mod=viewthread&tid=65示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息;这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别。下面是示例程序的简单步骤说明服务器端:第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;第二步:建立一个Socket对像;第三步:用socket对像的Bind()方法绑定EndPoint;第四步:用socket对像的Listen 阅读全文
posted @ 2012-12-10 20:32 Net-Spider 阅读(221) 评论(0) 推荐(0)
摘要:UDP 是User Datagram Protocol的简称, 中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。它是IETF RFC 768是UDP的正式规范。 UDP报头 UDP报头由4个域组成,其中每个域各占用2个字节,具体如下: 源端口号 目标端口号 数据报长度 校验值 UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据... 阅读全文
posted @ 2012-12-10 20:13 Net-Spider 阅读(229) 评论(0) 推荐(0)
摘要:所谓的协议就是通讯双方协商并制定好要传送的数据的结构与格式。并按制定好的格式去组合与分析数据。从而使数据得以被准确的理解和处理。我们先把接收回来的数据写入一个流中。然后分析其中是否有完整的数据包,如果有,将其从流中取出,并将这部分数据从流中清除。直到流中没有完整的数据为止,以后接收回来的数据就将其写... 阅读全文
posted @ 2012-12-08 03:46 Net-Spider 阅读(360) 评论(0) 推荐(0)
摘要:在网络通讯的编程中我们经常使用到Socket, 这种情况下我们往往需要长期的监听某个端口, 以获得相应的Socket, 然后再利用它进行相关操作. 但是这样的话, 主线程就会被阻塞.无法对其他时间做出相应. 其实在.Net的Socket类中提供了对异步操作的支持. 下面将介绍其基本原理, 以及利用它做的一个P2P的实现.背景知识: 你需要了解有关Socket的基本知识, 以及Delegate的异步调用操作. 在这个例子中, 我们实现了一个利用非阻塞(non-blocking)的Socket进行局域网通讯的P2P应用. 每个客户拥有一个Grid(类似于一个二维数组), 当它启动Grid设置服务的 阅读全文
posted @ 2012-12-08 03:43 Net-Spider 阅读(192) 评论(0) 推荐(0)
摘要:1.业务类在对此包装的socket进行访问时,由于是三个线程之间进行通讯,这个线程无法捕捉另一个线程产生的异常,所以通过信号量来通知是否有异常的产生:[转自听香水榭]一个封装的异步Socket客户端 1usingSystem;2usingSystem.Collections;3usingSystem... 阅读全文
posted @ 2012-12-08 03:30 Net-Spider 阅读(304) 评论(0) 推荐(0)
摘要:源码下载:http://www.tracefact.net/SourceCode/Network-Part5.rarC#网络编程(接收文件) - Part.5这篇文章将完成Part.4中剩余的部分,它们本来是一篇完整的文章,但是因为上一篇比较长,合并起来页数太多,浏览起来可能会比较不方便,我就将它拆为两篇了,本文便是它的后半部分。我们继续进行上一篇没有完成的步骤:客户端接收来自服务端的文件。4.客户端接收文件4.1服务端的实现对于服务端,我们只需要实现上一章遗留的sendFile()方法就可以了,它起初在handleProtocol中是注释掉的。另外,由于创建连接、获取流等操作与receive 阅读全文
posted @ 2012-12-04 21:51 Net-Spider 阅读(176) 评论(0) 推荐(0)