------------------ 前言 ------------------ 开发了这么多年,发现最困难的程序开发就是通讯系统. 其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎么复杂,基本上都能够本地代码本地调试,性能也不太重要.(也许这个就是.net的企业级开发的战略吧) 可是来到通讯系统,一切变得困难复杂.原因实在太多了,如: 性能永远是第一位:有时候一个if判断都要考虑性能,毕竟要损耗一个CPU指令,而在通讯系统服务器,每秒钟都产生上百万级别的通讯量,这样一个if就…
------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协议的设计,这个是整个socket框架最底层基础的部分,接下来整个socket服务器大楼都将在这个协议设计基础上不断搭建出来. 这篇文章我主要接上文提出的服务器各个性能参数给出解决思路. ------------------- socket服务端接收模块设计  -------------------…
转载:http://www.cnblogs.com/zc22/archive/2010/06/27/1766007.html ------------------ 前言 ------------------ 开发了这么多年,发现最困难的程序开发就是通讯系统. 其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎么复杂,基本上都能够本地代码本地调试,性能也不太重要.(也许这个就是.net的企业级开发的战略吧) 可是来到通讯系统,一切变得困难复杂.原因实在太多了,如: 性能永远是第一位…
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全 tcp Socket的超时时间默认20多秒,而实际连上不需1秒时间,20多秒是无法接受的. IPEndPoint ipep = new IPEndPoint(ip, port);//IP和端口 Socket soc…
前言 tcp的包的格式可以看我以前的计算机网络整理,下面这些周边只是为了开发时候我们能用到一些理论知识. 正文 首先要介绍的就是域名,为啥有域名这东西呢?单纯站在网络的角度上讲这属于应用层的东西了. 如果站在万物互联的角度上讲,把互联网看做是一台大型电脑的话,那么域名就相当于句柄了. 句柄这东西解释一下,句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体.文件等,值得注意的是句柄不能是常量. Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址.简而言…
免责声明:和往常一样,此文章的观点都属于‘No Bugs’Hare(译注:一个网站) ,也许不一定和翻译者或者Overload编辑的意见一致.同时,翻译者从Lapine翻译到英语也具有一定的难度.除此之外,翻译者与Overload对于从阅读此文章所带来的后果或不作为明确不负任何责任. 原文地址:Once Again on TCP vs UDP 讨论TCP与UDP的好与坏几乎与Linux和windows的争辩有着一样长的历史.我一直支持一个观点,也就是:UDP与TCP都有各自的适用场景(比如:[N…
前言 本文介绍一些tcp的例子,然后不断完善一下. 正文 服务端: // See https://aka.ms/new-console-template for more information using System.Net; using System.Net.Sockets; var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); var ipAddress = IP…
前言 本文不会去介绍tcp的具体协议,因为这个tcp 应该不能说是单纯的连接和传输数据这么简单,里面还有很多机制. 正文 首先介绍一下什么是协议族(protocal Family),举个例子PF_INET 为ipv4 协议族了. 为什么有一个族的概念呢?因为吧,ipv4 有很多协议,地址解析协议ARP(Address Resolution Protocol).逆地址解析协议RARP(Reverse Address Resolution Protocol).互联网控制报文协议ICMP(Intern…
前言 简单编写一下tcp例子. 正文 我们常说IOS有7层,实际上也只有4层,或者这样说简单的说是4层. 首先是数据链路层,首先这一层解决了什么问题呢?为什么要有这一层呢? 首先要抛开有操作系统的意识,因为它为我们做了太多东西了,摆在你面前的只有两个终端和一根网线. 数据链路层定义了在单个链路上如何传输数据.这些协议与被讨论的各种介质有关.示例:ATM,FDDI等.数据链路层必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧,帧是数据链路层的传送单位:如何控…
前言 前文我们介绍了网络协议的各层,同时也介绍了一下我们在编写代码时候的服务端的accept.bind.listen.connect.send做了什么. 可以说是从宏观的角度,或者代码开发的角度来说的,在此我觉得还不够具体. 同样我想解释一下为什么我说服务端listen之后,客户端已经可以进行tcp连接了,同样可以发送消息了. 正文 首先我们的tcp连接网图: 前提,这个时候服务端只是listen了,并没有accept.且客户端调用了connect,同时send 了hello word了. 第一…