《2022年网络编程常用的协议和函数 .pdf》由会员分享,可在线阅读,更多相关《2022年网络编程常用的协议和函数 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、 需要理解的协议1.PPP:点对点协议( Point to Point Protocol )。点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。2.ARP:地址解析协议(address resolution Protocol )。ARP实现通过 IP 地址得知其物理地址。3.RARP :反向地址转换协议(RARP:Reverse Address Resolution Protocol )。反向地址转换协议(RARP)允许局域网的物理机器从网关服务器的ARP 表或者缓存上请求其 IP 地址。4.IP:IP 是英文 InternetProtocol (网络之间互连的协议)
2、的缩写,中文简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。5.ICMP:ICMP 是(InternetControl Message Protocol )Internet 控制报文协议。它是 TCP/IP 协议族的一个子协议,用于在IP 主机、路由器之间传递控制消息。6.IGMP:InternetGroup ManagementProtocol (Internet组管理协议 )。Internet组管理协议( IGMP)是因特网协议家族中的一个组播协议,用于IP 主机向任一个直接相邻的路由器报告他们的组成员情况。7.TCP: TransmissionControl Protoc
3、ol 传输控制协议TCP是一种面向连接的、可靠的、基于字节流的传输层(Transport layer)通信协议。8.UDP: User Datagram Protocol 的简称, 中文名是用户数据包协议,是OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。9.HTTP:超文本传送协议(hypertexttransportprotocol )。一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。10.DNS:计算机域名系统(Domain Name System 或 Domain Name Service) 的缩写,它是由解
4、析器和域名服务器组成的。域名系统为Internet上的主机分配域名地址和 IP 地址。11.SMTP:(Simple Mail Transfer Protocol )即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。12.FTP:( File Transfer Protocol, FTP)是 TCP/IP 网络上两台计算机传送文件的协议。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 1
5、3.POP3:(Post Office Protocol 3)即邮局协议的第3 个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。14. TFTP:( Trivial File Transfer Protocol, 简单文件传输协议)是TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。二、 基本套接字编程接口函数1.WSAStartup:应用程序或DLL 只能在一次成功的WSAStartup() 调用之后才能调用进一步的 Windows Sockets API 函数.原型: intPASCAL FAR WS
6、AStartup ( WORD wVersionRequested,LPWSADATAlpWSAData );参数:wVersionRequestedWindows Sockets API 提供的调用方可使用的最高版本号 .高位字节指出副版本(修正)号,低位字节指明主版本号.lpWSAData 指向 WSADATA 数据结构的指针 ,用来接收 Windows Sockets实现的细节返回值 : 0成功.以下值代表错误:WSASYSNOTREADY指出网络通信依赖的网络子系统还没有准备好.WSAVERNOTSUPPORTED所需的 Windows Sockets API 的版本未由特定的Wind
7、ows Sockets 实现提供 .WSAEINVAL应用程序指出的Windows Sockets 版本不被该 DLL 支持 .2.closesocket:关闭一个套接口。原型: int PASCALFAR closesocket( SOCKET s);参数:s:一个套接口的描述字。返回值 : 0成功.以下值代表错误:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - WSANOTINITIALISED :在使用此 API 之前应首
8、先成功地调用WSAStartup() 。WSAENETDOWN:WINDOWS 套接口实现检测到网络子系统失效。WSAENOTSOCK:描述字不是一个套接口。WSAEINPROGRESS :一个阻塞的WINDOWS 套接口调用正在运行中。WSAEINTR:通过一个 WSACancelBlockingCall() 来取消一个(阻塞的)调用。WSAEWOULDBLOCK:该套接口设置为非阻塞方式且SO_LINGER 设置为非零超时间隔。3.WSACleanup:中止 Winsock 2 DLL (Ws2_32.dll)的使用。释放WinSock 实现分配给应用程序的系统资源。原型: int PAS
9、CALFAR WSACleanup ( void );参数:无返回值 :成功返回 04.socket :创建一个能够进行网络通信的套接字。原型: int socket(int domain, int type, int protocol);参数:第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP 协议族,该参数置AF_INET;第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock 接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部);第三个参数指定应用程序所使
10、用的通信协议。返回值 : 成功返回新创建的套接字的描述符,失败返回INVALID_SOCKET。5.send :经套接字传送消息原型: ssize_t send ( int s , const void *msg , size_t len , int flags);参数:第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程式要发送数据的缓冲区;第三个参数指明实际要发送的数据的字节数;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - -
11、- - - 第四个参数一般置0。返回值 : 成功则返回实际传送出去的字符数,失败返回1,错误原因存于errno 中6.recv :从一个套接口接收数据。原型: int PASCALFAR recv( SOCKETs, char FAR* buf, int len, int flags);参数: s:一个标识已连接套接口的描述字。buf:用于接收数据的缓冲区。len:缓冲区长度。flags :指定调用方式。返回值 : 若无错误发生, recv() 返回读入的字节数。如果连接已中止,返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError() 获取相应错误代
12、码。7.sendto :将指定字节数的数据发送到指定的终结点。原型: typedef int (_stdcall * SendTo) (SOCKET sSocket, const char * lpBuffer,DWORD dwLength,intdwFlags,const sockaddr * sinTo, nt dwToLength);参数:s 套接字buff 待发送数据的缓冲区size 缓冲区长度Flags 调用方式标志位, 一般为 0, 改变 Flags,将会改变 Sendto 发送的形式addr (可选)指针,指向目的套接字的地址len addr 所指地址的长度返回值 : 实际发送数
13、据的长度。8.recvfrom:经 socket接收数据原型: ssize_t recvfrom(intsockfd,void *buf,intlen,unsignedint flags, structsockaddr *from,socket_t*fromlen);参数:s:标识一个已连接套接口的描述字。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - buf:接收数据缓冲区。len:缓冲区长度。flags:调用操作方式。fro
14、m :(可选)指针,指向装有源地址的缓冲区。fromlen :(可选)指针,指向from 缓冲区长度值。返回值 : 成功则返回接收到的字符数,失败返回 -1.9.connect:建立 socket 连线原型: int connect (int sockfd,structsockaddr * serv_addr,intaddrlen);参数:参数一:套接字描述符参数二:指向数据机构sockaddr 的指针,其中包括目的端口和IP 地址参数三:参数二sockaddr 的长度,可以通过sizeof(struct sockaddr )获得返回值 : 成功则返回0,失败返回 -1,错误码 GetLast
15、Error() 。10. accept :在一个套接口接受一个连接。原型:SOCKET PASCALFAR accept( SOCKET s, struct sockaddr FAR* addr,int FAR* addrlen);参数:s:套接口描述字,该套接口在listen() 后监听连接。addr :(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。Addr 参数的实际格式由套接口创建时所产生的地址族确定。addrlen :(可选)指针,指向存有addr 地址长度的整形数。返回值 :成功返回一个新的套接字描述符,失败返回-1。11.listen :将 Socket 置于侦
16、听状态。原型: int PASCALFAR listen( SOCKET s, int backlog);参数:S:用于标识一个已捆绑未连接套接口的描述字。backlog :等待连接队列的最大长度。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 返回值 :如无错误发生, listen() 返回 0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError() 获取相应错误代码。12. Bind :
17、将套接字绑定到一个已知的地址上。原型: int bind(int socket, const struct sockaddr *address, socklen_taddress_len);参数:socket :是一个套接字。address :是一个sockaddr 结构指针,该结构中包含了要结合的地址和端口号。address_len :确定 address 缓冲区的长度。返回值 : 如果函数执行成功,返回值为0,否则为 SOCKET_ERROR 。13. inet_addr:将一个点分十进制的IP 转换成一个长整数型数INET_ADDR() 。原型: in_addr_tinet_addr(c
18、onstchar *cp);参数: 字符串,一个点分十进制的IP 地址返回值 :如果正确执行将返回一个无符号长整数型数。如果传入的字符串不是一个合法的 IP 地址,将返回INADDR_NONE 。14. gethostbyname:返回对应于给定主机名的主机信息。原型: struct hostent FAR *PASCAL FAR gethostbyname(constcharFAR *name);参数: 字符串(主机名)返回值 : 如果没有错误发生,gethostbyname()返回如上所述的一个指向hostent 结构的指针,否则,返回一个空指针。应用程序可以通过WSAGetLastErr
19、or() 来得到一个特定的错误代码。15. select :确定一个或多个套接字的状态。原型: int select(int nfds,fd_setFAR* readfds, fd_set FAR*writefds,fd_setFAR*exceptfds,consetstruct timeval FAR* timeout);参数:参数一:为了保持与早期的Berkeley 套接字应用程序兼容,一般忽略它,置为0.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - -
20、 - - - - - - - 参数二:用于检查可读性,参数三:用于检查可写性,参数四:用于检查带外数据,参数五:一个指向timeval 结构的指针,用于决定select 等待 I/o 的最长时间。如果为空将一直等待。返回值 : 0 :就绪描述字的正数目-1:出错0 :超时16. htons :将主机的无符号短整形数转换成网络字节顺序。原型: u_short PASCAL FAR htons( u_short hostshort);参数: hostshort :主机字节顺序表达的16 位数。返回值 : 返回一个网络字节顺序的值。17.htonl :将主机的无符号长整形数转换成网络字节顺序。原型:
21、 uint32_thtonl(uint32_thostlong);参数: hostlong :主机字节顺序表达的32 位数。返回值 : 返回一个网络字节顺序的值。18. ntohs :将一个无符号短整形数从网络字节顺序转换为主机字节顺序。原型: uint16_tntohs(uint16_tnetshort);参数: netshort :一个以网络字节顺序表达的16 位数。返回值 : 返回一个以主机字节顺序表达的数。19. ioctlsocket:原型: int PASCAL FAR ioctlsocket(SOCKET s, long cmd,u_longFAR*argp);参数:s:一个标识
22、套接口的描述字。cmd :对套接口s 的操作命令。argp:指向 cmd命令所带参数的指针。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 返回值 : 成功后, ioctlsocket()返回 0。否则的话,返回SOCKET_ERROR 错误,应用程序可通过WSAGetLastError()获取相应错误代码。20. getsockopt:获取一个套接口选项。原型: int getsockopt(intsockfd, int le
23、vel, int optname,void *optval,socklen_t *optlen);参数:sockfd :一个标识套接口的描述字。level :选项定义的层次。支持的层次仅有SOL_SOCKET和 IPPROTO_TCP。optname :需获取的套接口选项。optval :指针,指向存放所获得选项值的缓冲区。optlen :指针,指向optval 缓冲区的长度值。返回值 :若无错误发生,getsockopt() 返回 0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。21. setsockopt:设置套接口的选项。
24、原型: int PASCALFAR setsockopt(SOCKET s, int level, int optname,const char FAR *optval,int optlen);参数:s:标识一个套接口的描述字。level:选项定义的层次;目前仅支持SOL_SOCKET和 IPPROTO_TCP 层次。optname :需设置的选项。optval :指针,指向存放选项值的缓冲区。optlen :optval 缓冲区长度。返回值 : 若无错误发生, setsockopt() 返回 0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError() 获
25、取相应错误代码。三、 Winsock及相关的函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 1.select 及相关宏 (FD_ZERO:FD_SET:FD_ISSET:FD_CLR)2.WSAAsyncSelect3.WSAEventSelect :4.WSACreateEvent :5.WSAResetEvent :6.WSACloseEvent :7.WSAWaitForMultipleEvents :8.WSAEnumNetworkEvents以下只需了解:9._beginthread :10. WaitForMultipleObjects:11. WaitForSingleObject :12. CreateMutex :13. ReleaseMutex :14. CloseHandle:15.timeSetEvent :16. SetTimer名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -
限制150内