winsock编程超级详解.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
winsock编程超级详解

Socket编程是网络编程的重要组成部分,编写简单的服务端程的程序的一般的步骤如下 第一步:包含WinSocket的头文件和动态链接库(DLL) #include Winsock2.h #include windows.h #pragma comment(lib,ws2_32) 第二步:初始化WSAStartup 在MSDN中WSAStarup的原型如下: int WSAStartup( __in WORD wVersionRequested, __out LPWSADATA lpWSAData ); 其中的第一个参数是版本,第二个参数是一个指向WSADATA结构体的指针,代码如下: WORD Version = MAKEWORD(2,2); //通过MAKEWORD来设定版本,高版本和低版本都为2,也就是限定了版本必须为2 WSADATA wsadata ; //结构体的一个成员 wsadata //初始化并判断是不是成功,如果成功的话返回的是0,不成功的话返回的值为非0,那么就要使用WSAleanup()函数了 if(WSAStartup(Version,wsadata)){ coutWSAStartup Error!endl; WSACleanup(); } 第三部,初始化一个Socket, 在MSDN中socket的原型如下 SOCKET WSAAPI socket( __in int af, __in int type, __in int protocol ); 其中第一个参数为网络层协议类型,第二个参数为socket类型,第三个参数为传输层的协议类型,代码如下: //第一个参数多数时候为AF_INET,第二个参数可以为SOCK_STREAM适用于可信连接,也就是tcp链接,或者为SOCK_DGRAM,适用于UDP协议 第三个参数为传输层协议,如果第二个参数为SOCK_STREAM,这里就为IPPROTO_TCP,如果是SOCK_DGRAM,这里就为IPPROTO_UDP SOCKET ServerSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(ServerSocket ==INVALID_SOCKET){ coutSocket Failendl; } 第四步:bind 在MSDN中bind的定义如下: int bind( __in SOCKET s, __in const struct sockaddr* name, __in int namelen ); 第一个参数一个已经初始化的socket,第一个参数为执行sockaddr或者是sockaddr_in的结构体的起始地址, 第三个参数为结构体的大小,代码如下: sockaddr_in ServerAddr;//定义一个结构体成员,这里使用的是sockaddr_in结构体 ServerAddr.sin_family=AF_INET;//初始化成员的sin_family为AF_INET ServerAddr.sin_addr.S_un.S_addr=INADDR_ANY;//允许任意的IP地址进行连接 ServerAddr.sin_port=htons(2012);//侦听端口为2012,这里使用了htons函数 //这里需要说明的是需要对第二个参数进行强制类型转换,(LPSOCKADDR)ServerAddr,并且判断是不是bind成功,成功后返回的是为0 if(bind(ServerSocket,(LPSOCKADDR)ServerAddr,sizeof(ServerAddr))){ coutbind Failendl; } 第五步:侦听 在MSDN中listen的原型如下: int listen( __in SOCKET s, __in int backlog ); 依然第一个参数为初始化了的socket,第二个参数为最大允许的连接数,代码如下: //这里依然使用的是上面的socket:ServerSocket if(listen(ServerSocket,5)){ coutlisten Failendl; } 第六步:accept 在MSDN中原型如下: SOCKET accept( __in SOCKET s, __out struct sockaddr* addr, __inout int* addrlen ); 第一个参数一个新的客户端的Socket,这里需要定义一个,第二个参数依然为执行sockaddr或者是sockaddr_in的结构体

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档