var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2008年09月06日

    套接字编程

    分类:

    套接字(socket)有三种类型:

    l  流式套接字(SOCK_STREAM),基于TCP协议实现

    l  数据报式套接字(SOCK_DGRAM),基于UDP协议实现

    l  原始套接字(SOCK_RAW)

     

    基于TCP(面向连接)socket编程的服务器端程序流程如下:

    1.     加载套接字库,创建套接字(WSAStartup/socket)

    2.     绑定套接字到一个IP地址和一个端口上(bind)

    3.     将套接字设置为监听模式等待客户连接请求(listen)

    4.     客户请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)

    5.     用返回的套接字和客户端进行通信(send/recv)

    6.     返回,等待另一客户连接请求。

    7.     关闭套接字,关闭加载的套接字库(closesocket/WSACleanup)

     

    基于TCP(面向连接)socket编程的客户端程序流程如下:

    1.     加载套接字库,创建套接字(WSAStartup/socket)

    2.     向服务器发出连接请求(connect)

    3.     和服务器端进行通信(send/recv)

    4.     关闭套接字,关闭加载的套接字库(closesocket/WSACleanup)

     

    基于UDP(面向无连接)socket,服务器端即先启动的那端叫接收端,客户端即发送数据的那端叫发送端。服务器端程序流程如下:

    1.     加载套接字库,创建套接字(WSAStartup/socket)

    2.     将套接字绑定到一个本地地址和端口上(bind)

    3.     等待接受数据(recvfrom)

    4.     关闭套接字,关闭加载的套接字库(closesocket/WSACleanup)

     

    基于UDP(面向无连接)socket编程的客户端程序流程如下:

    1.     加载套接字库,创建套接字(WSAStartup/socket)

    2.     向服务器发送数据(sendto)

    3.     关闭套接字,关闭加载的套接字库(closesocket/WSACleanup)

     

    由于使用了WinSock库中的函数,所以需要添加相应的.lib文件:ws2_32.lib。打开VS2008 SP1项目属性,在Configuration Properties下选Linker->Input,在Additional Dependencies里添加该文件。

     

    VS2005 SP1使用了新的运行时依赖库,但VS2008 SP1仍然使用旧的运行时依赖库,即CL.EXE, LINK.EXE, DEVENV.EXE内的清单仍然只要求‘9.0.21022.8’版的CRT,而不是SP1支持的‘9.0.30729.8’版本,见解释(中文版)解决方案

     

    【资源】

    基于TCPsocket编程

    分享到:

    历史上的今天:

    预防跨站脚本(2) 2010年09月06日
    IDR_MAINFRAME资源 2008年09月06日
    Dns.Resolve方法解析 2007年09月06日
    Borland复活Turbo品牌 2006年09月06日