收藏 分享(赏)

网络通信的实现.docx

上传人:dreamzhangning 文档编号:2833432 上传时间:2018-09-28 格式:DOCX 页数:7 大小:19.29KB
下载 相关 举报
网络通信的实现.docx_第1页
第1页 / 共7页
网络通信的实现.docx_第2页
第2页 / 共7页
网络通信的实现.docx_第3页
第3页 / 共7页
网络通信的实现.docx_第4页
第4页 / 共7页
网络通信的实现.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、 当使用 TCP/IP 协议一发客户服务器服务程序时,服务器需要等待任意数量客户端的连接,以便以他们提供服务。客户端连接服务器时,必须先知道服务器的名称。在 TCP/IP 中,就是服务器的 IP 地址和端口号。bind()函数实现将服务器绑定到一个已知的名字上的功能。接下来要将服务器套接字设置为监听状态,这是通过 listen()函数完成的。在监听状态下,如果客户端向服务器发起连接请求,服务器通过调用 accept()函数来接受该连接请求。服务器与客户端完成连接后,就可以进行数据通信了。对客户端来说,首先调用 connect()函数向服务器发出连接请求。如果服务器接受了该请求,接下来就可以与服

2、务器通信了。开发套接字应用程序时,首先应进行 Windows Sockets 的初始化,加载Windows Sockets 的实现,然后创建套接字,对 TCP 套接字来说,需要在socket()函数或都 WSASocket()函数中指明 SOCK_STREAM 套接字类型。当服务器和客户端通信结束时,关闭套接字,释放 Windows Sockets 的实现。流程如下:服务器:创建套接字绑定 监听接受连接 收发数据关闭客户端:创建套接字连接 收发数据 关闭Windows Sockets API 重要函数说明如下:一、WSAStartup()函数:不管是客户端还是服务器,开发 Windows So

3、ckets 应用程序时,必须首先加载 Windows Sockets 动态库(DLL )。WSAStartup()函数实现此项功能。该函数是套接字 应用程序必须调用的第一个函数。该函数声明如下:int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);wVersionRequested: 指定准备加载 Windows Sockets 动态库的版本。高字节指定所需要库文件的副版本,低字节指定主版本。在应用程序中可以使用MAKEWORD(X,Y)方便指定该参数。X 是高位字节,Y 是低位字节lpWSAData:指向 lpwsadata 结

4、构的指针,该参数返回被加载动态库的有关信息。WSADATA 结构声明如下:#define WSADESCRIPTION_LEN 256#define WSASYS_STATUS_LEN 128struct WSAData WORD wVersion;WORD wHighVersion;char szDescriptionWSADESCRIPTION_LEN+1;char szSystemStatusWSASYSSTATUS_LEN+1;unsigned short iMaxSockets;unsigned short iMaxUdpDg;char *lpVendorInfo;WSADATA 结

5、构被用来保存函数 WSAStartup 返回的 Windows Sockets 初始化信息。wVersion :Windows Sockets DLL 期望调用者使用的 Windows Sockets 规范的版本。 高位字节存储副版本号, 低位字节存储 主版本号,可以用 WORD MAKEWORD(BYTE,BYTE ) 返回这个值,例如:MAKEWORD(1,1)wHighVersion :这个 DLL 能够支持的 Windows Sockets 规范的最高版本。通常它与 wVersion 相同。szDescription :以 null 结尾的 ASCII 字符串,Windows Sock

6、ets DLL 将对Windows Sockets 实现的描述拷贝到这个字符串中,包括制造商标识。文本(最多可以有 256 个字符)可以包含任何字符,但是要注意不能包含控制字符和格式字符,应用程序对其最可能的使用方式是把它(可能被截断)显示在在状态信息中。szSystemStatus :以 null 结尾的 ASCII 字符串, Windows Sockets DLL 把有关的状态或配置信息拷贝到该字符串中。Windows Sockets DLL 应当仅在这些信息对用户或支持人员有用时才使用它们,它不应被作为 szDescription 域的扩展。iMaxSockets :单个进出能够打开的

7、socket 的最大数目。iMaxUdpDg:一个进程发送或接收的最大数据报长度lpVendorInfo :指向销售商的数据结构的指针。这个结构的定义(如果有)超出了 WindowsSockets 规范的范围。二、socket() 函数初始化 Windows Sockets DLL 之后,创建套接字。socket() 函数和WSASocket()将实现此功能。socket() 函数声明如下:SOCKET socket(int af,int type,int protocol);af:协议地址家族。创建 TCP/UDP 套接字时该参数为 AF_INET。type:协议的套接字类型。有 SOCK_

8、STREAM、SOCK_DGRAM 和SOCK_RAM 3 种类型protocol:协议。对于 SOCK_STREAM 套接字类型,该字段为IPPROTO_TCP 或为 0,对于 SOCK_DGRAM 套接字类型,该字段为IPPROTO_UDP 或为 0三、bind()函数bind()函数将套接字绑定到一个已知的地址。该函数声明如下:int bind(SOCKET s,const struct sockaddr FAR* name,int namelen);s:套接字name:地址namelen:sockaddr 结构长度四、listen()函数listen()函数将套接字设置为监听模式。li

9、sten()函数声明如下:int listen(SOCKET s,int backlog);s:套接字backlog:指定等待连接的最大队列长度(例如客户端的同时可连接数)五、accept()函数accept()函数实现接受一个连接请求的功能。accept()函数声明如下:SOCKET accept(int s;struct sockaddr FAR* addr,int FAR* addrlen);s:监听套接字addr: 该参数返回请求连接的客户端的地址addrlen: 该参数返回 SOCKADDR_IN 结构的长度六、recv()函数recv() 函数和 WSARevc()函数用于接受数据

10、。recv()函数声明如下:int recv(SOCKET s,char FAR* buf,int len,int flags);s:套接字buf:接收数据缓冲区len:缘冲区的长度flags:该参数影响该函数的行为。如果为 0 表示无特殊行为, MSG_PEEK会使有用的数据被复制到接收缓冲区内,但没有从系统缓冲区中将其删除MSG_OOB 表示处理带外数据。七、send()函数send()和 WSASend()函数用于发送数据。send()函数声明如下:int send(SOCKET s,const char FAR* buf,int len,int flags);s:套接字buf:发送数据

11、缓冲区len:发送数据长度flags:该参数影响该函数的行为。如果为 0 表示无特殊行为,MSG_DONTROUTE 要求传输层不要将数据路由出去,MSG_OOB 表示处理带外数据。 八、closesocket()函数closesocket()函数关闭套接字,释放后占资源。该函数声明如下:int closesocket(SOCKET s);s:套接字九、shutdown()函数shutdown()函数用于通知对方不再发送数据,或者不再接收数据,或者即不发送也不接收数据。该函数声明如下:int shutdown(SOCKET s,int how);s:套接字how:如果参数为 SD_RECEIV

12、E,则表示不允许再调用接收数据函数;如果该参数为 SE_SEND,则表示不允许再调用发送数据函数;如果该参数为SE_BOTH,则表示即不允许调用发送数据函数也不允许调用接收数据函数。十、connect() 函数connect() 函数实现连接服务器功能。该函数声明如下:int connect(SOCKET s,const struct sockaddr FAR* name,int namelen);s:套接字name:服务器地址namelen:sockaddr 结构的长度很幸运,茫茫人海中,我们能相遇在这里,而更能彼此选择对方,共同经历了这段刻骨铭心的爱恋 现在, 我 , 已老去,而你依旧春风迎面,花枝招展,内心有着些许悲凉! 不过,倍感欣慰的是,有更多的新硕硕加入了进来,相信他们会比我更爱你!我会永远记得,我是华硕硕市生!爱梦想,做自己!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报