随笔分类 -  [16] C# Socket编程

摘要:在C#中,如何将一个int转换成一个byte array,又如何将一个byte array转换成一个int 至少可以通过三种方法来进行转换。在.NET Framework类库的System名字空间中有个叫做BitConverter的类,它是专门用来进行这种转换的。它有一个GetBytes方法,对于大多数简单的类型来说,该方法都被重载了,它可以返回一个byte array来保存你传递的值。它也有几个ToTypeName方法用来将一个byte array转换成一个基本类型(primitive type):byte[] b = BitConverter.GetBytes( 0xba5eba11 ). 阅读全文
posted @ 2013-01-14 11:07 小麻雀 阅读(21394) 评论(0) 推荐(0) 编辑
摘要:Socket 编程时,单机最多可以建立多少个 TCP 连接,受到操作系统的影响。Windows 下单机的TCP连接数受多个参数影响:最大TCP连接数[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] TcpNumConnections = 0x00fffffe (Default = 16,777,214)以上注册表信息配置单机的最大允许的TCP连接数,默认为 16M。这个数值看似很大,这个并不是限制最大连接数的唯一条件,还有其他条件会限制到TCP 连接的最大连接数。最大动态端口数TCP客户端和 阅读全文
posted @ 2012-12-14 10:58 小麻雀 阅读(39480) 评论(0) 推荐(3) 编辑
摘要:.NET Socket开发之异步Socket 在基于.NET的网络服务端的开发中,我们用到和听到的最多的恐怕就是异步Socket了。异步Socket的性能比同步高出很多,但是编写代码比较复杂。因此异步Socket也是网络上讨论比较多的话题。 今天,我们就来讨论一下如何用异步Socket开发网络应用。在此之前我们先讨论两个问题。 一、异步Socket是如何工作的: 那异步Socket是如何工作的呢?我以接收一条消息来说明这个问题。首先,程序向系统投递一个接收数据的请求,并为其指定一个数据缓冲区和回调函数,回调函数用来指示当数据到达后将如何处理,然后我们的程序继续执行下去,当有数据到达的时... 阅读全文
posted @ 2012-12-14 10:57 小麻雀 阅读(774) 评论(0) 推荐(0) 编辑
摘要:.NET Framework 2.0SP1及以后版本提供了一组用于网络通信的增强功能类库,SocketAsyncEventArgs 就是其中最重要的一个,下面是MSDN对这组增强功能的类库的介绍。 System.Net.Sockets.Socket 类有一组增强功能,提供可供专用的高性能套接字应用程序使用的可选异步模式,SocketAsyncEventArgs 类就是这一组增强功能的一部分。该类专为需要高性能的网络服务器应用程序而设计。应用程序可以完全使用增强的异步模式,也可以仅仅在目标热点区域(例如,在接收大量数据时)使用此模式。 这些增强功能的主要特点是可以避免在异步套接字 I/O 量非. 阅读全文
posted @ 2012-10-30 15:23 小麻雀 阅读(3833) 评论(1) 推荐(1) 编辑
摘要:最近我负责一个IM项目的开发,服务端和客户端采用TCP协议连接。服务端采用C#开发,客户端采用Delphi开发。在服务端开发中我碰到了各种各样的网络异常断开现象。在处理这些异常的时候有了一些心得,现在写出来和大家分享一下。那网络异常断开原因主要有那些呢?归纳起来主要有以下两种:1、客户端程序异常。 对于这种情况,我们很好处理,因为客户端程序异常退出会在服务端引发ConnectionReset的Socket异常(就是WinSock2中的10054异常)。只要在服务端处理这个异常就可以了。2、网络链路异常。 如:网线拔出、交换机掉电、客户端机器掉电。当出现这些情况的时候服务端不会出现任何异常。.. 阅读全文
posted @ 2012-10-17 13:22 小麻雀 阅读(372) 评论(0) 推荐(0) 编辑
摘要:1.问题:在Socket通信中,我们经常要多客户端共用一个端口,但这往往会报错,因为正常来说一个端口只能绑定一次,但释放的时候比较麻烦,所以还是要是实现端口共用的话,就不用执行一个关一个再开一个。 2.实现端口复用: 正常绑定://定义网络地址,连接类型与网络协议并绑定本地IP与端口 socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); ipPoint = new IPEndPoint(IPAddress.Parse(ipAdrr)... 阅读全文
posted @ 2012-09-11 17:16 小麻雀 阅读(3878) 评论(1) 推荐(1) 编辑
摘要:Socket协议的形象描述socket的 英文原义是“孔”或“插座”。在这里作为4BDS UNIX的进程通信机制,取后一种意思。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开 阅读全文
posted @ 2012-09-11 15:31 小麻雀 阅读(12874) 评论(0) 推荐(0) 编辑
摘要:最近学习UDP编程,头都搞大了,找了不少资料,也请教了不少同行,自认为下面这篇资料写的很好,所以收藏之,以供参考. 1.在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对 像ICQ一类的发送聊天消息的情况作分析,对于其他情况,你或许也能得到一点帮助: 首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,运输层,应用层. UDP属于运输层,下面我们由下至上一步一步来看: 以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是... 阅读全文
posted @ 2012-08-11 14:11 小麻雀 阅读(546) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示