摘要: 其实只要用到Socket联接,基本上就得使用Thread,是交叉使用的。C#封装的Socket用法基本上不算很复杂,只是不知道托管之后的Socket有没有其他性能或者安全上的问题。在C#里面能找到的最底层的操作也就是socket了,概念不做解释。程序模型如下:WinForm程序 : 启动端口侦听;监视Socket联接情况;定期关闭不活动的联接;Listener:处理Socket的Accept函数,侦听新链接,建立新Thread来处理这些联接(Connection)。Connection:处理具体的每一个联接的会话。1:WinForm如何启动一个新的线程来启动Listener: //start 阅读全文
posted @ 2011-04-13 23:53 董雨 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 1、 为了增加效率,可以考虑采用无异常的函数 在.net2.0中Socket.Send,Socket.Receive 有了无异常的函数 Socket.Send(Byte[], Int32, Int32, SocketFlags, SocketError) Socket.Receive(Byte[], Int32, Int32, SocketFlags, SocketError) 减少不必要的异常,就等于增加效率。 2、Socket.Connected 不是当前的Socket状态 MSDN原文:获取一个值,该值指示 Socket 是在上次 Send 还是 Receive 操作时连接到远程主机。 阅读全文
posted @ 2011-04-13 23:42 董雨 阅读(348) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/showna/articles/757773.html最近在windows编程时需要考虑到“如何优雅地关闭一个socket”,查阅了一些资料,现将查到的相关资料做个汇编,希望能对后来者有所帮助(比较懒,所以英文资料没有翻译:-)) 1. 关闭Socket时究竟做了什么 关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接。 其状态图如下图所示: 起初每个socket都是CLOSED 阅读全文
posted @ 2011-04-13 22:58 董雨 阅读(670) 评论(0) 推荐(0) 编辑
摘要: 最近在写异步TCP程序,在调试时遇到了Client关闭后程序在接收回调里死循环,用client.Connected 检测好像也没用,在网上找到几篇用Socekt检测的文章,都还可以达到Client强行关闭后程序在退出死循环的功能。本人这个是在原有的程序上加了一个小小的判断条件就实现了,相比起来也是比较简单的,其主要代码如下:private void AcceptConnect(){ IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName()); listener = new TcpListener(ip[0], 60000); listene 阅读全文
posted @ 2011-04-13 22:53 董雨 阅读(1342) 评论(0) 推荐(0) 编辑