随笔分类 -  网络编程

摘要:http://tangfeng.iteye.com/blog/518135在windows平台构建网络应用,必须了解socket I/O模型。windows提供了选择(select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I /O(overlapped I/O)和完成端口(completion port)。一、客户端代码C++代码#include"stdafx.h"#include<WINSOCK2.H>#include<stdio.h>#pragmacomment(lib,"ws2_32. 阅读全文
posted @ 2011-06-28 10:30 董雨 阅读(189) 评论(0) 推荐(0)
摘要:http://tangfeng.iteye.com/blog/518141用异步选择模型,应用程序可在一个套接字上,接收以Windows消息为基础的网络事件通知。具体的做法是在建好一个套接字后,调用WSAAsyncSelect函数。服务器端代码:C++代码//writebylarry//2009-8-20//ThisisaserverusingWSAAsyncSelectmodel.#include"stdafx.h"#include<winsock.h>#include<tchar.h>#definePORT5150#defineMSGSIZE10 阅读全文
posted @ 2011-06-28 10:29 董雨 阅读(230) 评论(0) 推荐(0)
摘要:http://tangfeng.iteye.com/blog/518142WSAEventSelect和WSAAsyncSelect模型类似,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知。对于WSAAsyncSelect模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型上。在用事件选择模型开发的应用程序中,也能接收和处理所有那些事件。该模型最主要的差别在于网络事件会投递至一个事件对象句柄,而非投递至一个窗口例程。服务器端代码:C++代码//writebylarry//2009-8-20//ThisisaserverusingWSAEventSelectmode 阅读全文
posted @ 2011-06-28 10:26 董雨 阅读(284) 评论(0) 推荐(0)
摘要:http://tangfeng.iteye.com/blog/518146Winsock2的发布使得Socket I/O有了和文件I/O统一的接口。我们可以通过使用Win32文件操纵函数ReadFile和WriteFile来进行Socket I/O。伴随而来的,用于普通文件I/O的重叠I/O模型和完成端口模型对Socket I/O也适用了。这些模型的优点是可以达到更佳的系统性能,但是实现较为复杂,里面涉及较多的C语言技巧。例如我们在完成端口模型中会经常用到所谓的“尾随数据”。一、用事件通知方式实现的重叠I/O 模型C++代码//writebylarry//2009-8-20//Thisisas 阅读全文
posted @ 2011-06-28 10:25 董雨 阅读(299) 评论(0) 推荐(0)
摘要:在.NET中使用SMTP发送邮件http://www.cnblogs.com/TianFang/archive/2005/12/12/295641.html这是一篇转载,可能对大家很有用啊。摘要 本文简单介绍了SMTP协议(RFC2554)发送邮件的过程,并讨论了在 .NET 中使用SMTP发送邮件由简到繁的三种不同方案、各自可能遇到的问题及其解决办法。--------------------------------------------------------------------------------目录简介 .NET的SMTP类 .使用CDO组件发送邮件 .使用Socket撰写邮件 阅读全文
posted @ 2011-05-19 23:59 董雨 阅读(296) 评论(0) 推荐(0)
摘要:http://hi.baidu.com/__%B6%C0%B9%C2%B2%D0%D4%C6__/blog/item/93ce141390c1900c5aaf53a1.htmlC#编写基于.Net IOCP的高性能服务器(飞箭之峰)2008-10-15 15:01无论什么平台,编写支持高并发性的网络服务器,瓶颈往往出在I/O上,目前最高效的是采用Asynchronous I/O模型,Linux平台提供了epoll,Windows平台提供了I/O Completion Port(IO完成端口,即IOCP)。Windows自winsock2开始就提供了IOCP支持,可以通过C++直接调用API,但 阅读全文
posted @ 2011-05-19 23:13 董雨 阅读(1423) 评论(0) 推荐(0)
摘要:2009年07月11日 星期六 下午 12:48[译]C# Socket连接请求超时机制介绍您可能注意到了,.Net的System.Net.Sockets.TcpClient和System.Net.Sockets.Socket都没有直接为Connect/BeginConnect提供超时控制机制。因此,当服务器未处于监听状态,或者发生网络故障时,客户端连接请求会被迫等待很长一段时间,直到抛出异常。默认的等待时间长达20~30s。.Net Socket库的SocketOptionName.SendTimeout提供了控制发送数据的超时时间,但并非本文讨论的连接请求的超时时间。背景这个问题最初源于我 阅读全文
posted @ 2011-05-19 10:57 董雨 阅读(395) 评论(0) 推荐(0)
摘要:http://blog.csdn.net/piggyxp/archive/2004/09/23/114883.aspx手把手教你玩转SOCKET模型之重叠I/O篇“身为一个初学者,时常能体味到初学者入门的艰辛,所以总是想抽空作点什么来尽我所能的帮助那些需要帮助的人。我也希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯付出时的吝啬。” ----- 题记 By PiggyXP(小猪)前 言 其实我首先应该道歉,因为7月份的时候曾信誓旦旦的说要写一套关于SOCKET所有模型的入门文章以及配套代码,不过没想到后天竟然被美女所迷出去度假了,刚刚回来不久。。。。。 阅读全文
posted @ 2011-05-18 10:30 董雨 阅读(279) 评论(0) 推荐(1)
摘要:一:概述 (1)IOCP是什么呢? 它就是IO Completion Port的缩写,它就是MS的内核调用机制。 因为在硬件里,与驱动程序打交道都是通过协议栈进行的,并且是通过发送包请求实现。 当在网络服务器使用它实现时,就会最接近内核部份,提高了性能,也提高速度。目前就要看看怎么样用IOCP创建高性能的服务器,怎么样响应大量用户的TCP或者UDP的数据。 当创建IOCP端口后,就要初始化连接监听,这跟一般的SOCKET是没有什么区别的,当然要把它关联到IOCP,否则就不会从IOCP那里得响应。 接着就会创建满足需要的接收请求,这样就会收到连接进来。 如果有连接进来,就会收在GetQueued 阅读全文
posted @ 2011-05-18 10:29 董雨 阅读(682) 评论(0) 推荐(1)
摘要:一、什么是keepalive定时器?[1]在一个空闲的(idle)TCP连接上,没有任何的数据流,许多TCP/IP的初学者都对此感到惊奇。也就是说,如果TCP连接两端没有任何一个进程在向对方发送数据,那么在这两个TCP模块之间没有任何的数据交换。你可能在其它的网络协议中发现有轮询(polling),但在TCP中它不存在。言外之意就是我们只要启动一个客户端进程,同服务器建立了TCP连接,不管你离开几小时,几天,几星期或是几个月,连接依旧存在。中间的路由器可能崩溃或者重启,电话线可能go down或者back up,只要连接两端的主机没有重启,连接依旧保持建立。这就可以认为不管是客户端的还是服务器 阅读全文
posted @ 2011-04-17 20:05 董雨 阅读(1215) 评论(0) 推荐(0)
摘要:http://honordream.blog.hexun.com/2858506_d.html同步套接字通信Socket支持下的网上点对点的通信服务端实现监听连接,客户端实现发送连接请求,建立连接后进行发送和接收数据的功能服务器端建立一个socket,设置好本机的ip和监听的端口与socket进行绑定,开始监听连接请求,当接收到连接请求后,发送确认,同客户端建立连接,开始与客户端进行通信。客户端建立一个socket,设置好服务器端的IP和提供服务的端口,发出连接请求,接收到服务的确认后,尽力连接,开始与服务器进行通信。服务器端和客户端的连接及它们之间的数据传送均采用同步方式。 SocketSo 阅读全文
posted @ 2011-04-17 00:50 董雨 阅读(387) 评论(0) 推荐(0)
摘要:异步客户端套接字在等待网络操作完成时不挂起应用程序。相反,它使用标准 .NET 框架异步编程模型在一个线程上处理网络连接,而应用程序继续在原始线程上运行。异步套接字适用于大量使用网络或不能等待网络操作完成才能继续的应用程序。Socket 类遵循异步方法的 .NET 框架命名模式;例如,同步 Receive 方法对应异步 BeginReceive 和 EndReceive 方法。异步操作要求回调方法返回操作结果。如果应用程序不需要知道结果,则不需要任何回调方法。本节中的代码示例阐释如何使用某个方法开始与网络设备的连接并使用回调方法结束连接,如何使用某个方法开始发送数据并使用回调方法完成发送,以及 阅读全文
posted @ 2011-04-17 00:44 董雨 阅读(956) 评论(0) 推荐(0)
摘要:http://guojun0681.blog.163.com/blog/static/10051312010113113140952/首先我简单介绍一下同步TCP编程 与异步TCP编程。在服务端我们通常用一个TcpListener来监听一个IP和端口。客户端来一个请求的连接,在服务端可以用同步的方式来接收,也可以用异步的方式去接收。比如:TcpListene server = new TcpListener(IPAddress.Parse("127.0.0.1"), port);TcpClient tc =server.AcceptTcpClient();这里就一个同步接收 阅读全文
posted @ 2011-04-17 00:35 董雨 阅读(1339) 评论(0) 推荐(0)
摘要:其实只要用到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 董雨 阅读(317) 评论(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 董雨 阅读(366) 评论(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 董雨 阅读(685) 评论(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 董雨 阅读(1384) 评论(0) 推荐(0)
摘要:最近,闲啊,看首页文章都看烦了(不是骂就是被骂,唉~~~),索性来鼓捣一下OpenNETCF这个玩意儿,这篇文章就从WIFI的控制开始说起吧。首先,你可能会上网搜“.net cf msdn wifi"这个关键词,不管如何吧,肯定会看到MSDN的一篇介绍用OpenNETCF进行WIFI开发的一篇文章,我也看过那篇文章,说的的确不错,但是就是感觉怪怪的。首先,那篇文章中使用的方法比较“老”,因为IDE总提示我有些类库太旧了,建议用新的替换掉。其次,我只想获取本机的WIFI适配器而不需要像那篇文章获取了所有适配器。所以,我亲自动手,和大家一起分享一下使用OpenNETCF来操作设备Wifi 阅读全文
posted @ 2011-04-01 09:45 董雨 阅读(453) 评论(0) 推荐(0)
摘要:windows xp sp2 的wlanapi.dll的补丁下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=52a43bab-dc4e-413f-ac71-158efd1ada50&DisplayLang=enusing System;using System.Collections.Generic;using System.Linq;using System.Text;using NativeWifi;namespace WiimoteTest{ class WifiManager { WlanClie 阅读全文
posted @ 2011-03-30 11:36 董雨 阅读(1047) 评论(0) 推荐(0)
摘要:极其常用的Ping命令通过向计算机发送ICMP Echo请求报文并且监听回应报文的返回,以校验与远程计算机或本地计算机的连接。 使用ICMP.DLL实现Ping 在Windows平台编程中实现Ping的一个最简单方法是调用ICMP.DLL这个动态链接库,引用ICMP.DLL中的三个函数即可:HANDLE IcmpCreateFile(void); 这个函数打开个ICMP Echo请求能使用的句柄;BOOL IcmpCloseHandle(HANDLE IcmpHandle); 这个函数关闭由IcmpCreateFile打开的句柄;DWORD IcmpSendEcho( HANDLE IcmpH 阅读全文
posted @ 2011-03-28 12:55 董雨 阅读(399) 评论(0) 推荐(0)