
图3.4 Send()和Recv()都是对本地套接字的操作8.按照选定目的地陷报套接字发送数据SENDTO()int sendto( SOCKET s, char * buf, int len, int flags, struct sockaddr * to, int tolen);9.接收一篙报并保存源地址,从数据报套接字接收数据 RECVFORM()int recvfrom( SOCKET s, char * buf, int len, int flags, struct sockaddr* from, int* fromlen); 10.关闭套接字CLOSESOCKET() int closesocket( SOCKET s); 11 . 禁 止 在 一 接 口 上 进 行 数 据 的 接 收 与 发 送 SHUTDOWN() int shutdown( SOCKET s, int how);3.2.4 Winsock的辅助变量1.Winsock中的字节顺谢函数 图3.5 两种本机字节排序。图3-5 两种本机字节顺序Winsock API特因此修改了四庚,(1)htonl() 将帜无符号长整型数本机顺谢为网络字节顺衞st to Network Long),用于IP地址。
u_long PASCAL FAR htonl( u_long hostlong); hostlong是种节顺酗的32位数。htonl()返回一嘎缱纸谒承怠 (2)htons() 将 的 无 符 号 短 整 型 数 转 换 成 网 络 字 节 顺 衞st to Network Short),用于端口号。 u_short PASCAL FAR htons( u_short hostshort);hostshort:种节顺酗的16位数。htons()返回一嘎缱纸谒承怠(3)ntohl() 将一耕号长整型数从网络字节顺谢为种节顺?Network to Host Long),用于IP地址。 u_long PASCAL FAR ntohl( u_long netlong); netlong是一给络字节顺酗的32位数,ntohl()返回一 钢节顺酗的数。(4)ntohs()将一耕号短整型数从网络字节顺谢为种节顺?Network to Host Sort),用于端口号u_short PASCAL FAR ntohs( u_short netshort);netshort是一给络字节顺酗的16位数。
ntohs()返回 一钢节顺酗的数。2.浑套接口相连的端地址GETPEERNAME() int getpeername( SOCKET s, struct sockaddr * name, int * namelen); 3.换赣口的本地名字GETSOCKNAME() int getsockname( SOCKET s, struct sockaddr * name, int * namelen);4.将一 钢十进制形式的 IP地址转换成一耕型数 INET_ADDR()unsigned long inet_addr (const char * cp);5.将网络地址转化成点分十进制的字符串窱NET_NTOA()char * inet_ntoa( struct in_addr in);3.2.5 Winsock的信息查询函数Winsock API提供了一组信息查询函数,让我们可方便地惶捉涌谒枰耐绲刂沸畔⒁约捌渌畔ⅲ (1)Gethostname() 用来返回本地计算机的标准蛀。 int gethostname(char* name, int namelen); (2)Gethostbyname() 返回对应于给定蛀的峙息。

struct hostent* gethostbyname(const char* name);(3)Gethostbyaddr()根据一肛址取回相应的峙息。 struct hostent* gethostbyaddr(const char* addr, int len, int type); (4)Getservbyname() 返回对应于给定服瓮协议名的相关服微。 struct servent* getservbyname(const char* name, const char* proto); (5)Getservbyport() 返回对应于给定端口号和协议名的相关服微。 struct servent * getservbyport(int port, *proto); const char(6)Getprotobyname() 返回对应于给定协议名的相关协议信息。 struct protoent * name); getprotobyname(const char *(7)Getprotobynumber () 返回对应于给定协议号的相关协议信息。struct protoent * getprotobynumber(int number);除了Gethostname()函数以外,其它六庚有下列共同的特 点: ①函数名都采用GetXbyY的方式。
②如果函数成功地执行,就返回一钢结构的指针,该 结构包括所必须的信息。③如果变量执行出现错瓮返回一父针。应用程性 立即礢AGetLastError()来得到一辅的错坞。 ④函数执行时,可能在本地计算机上查询,也或许通过网络厦⑺颓肭椿枰男畔ⅲ馊【没 络的配置模式。 ⑤为了可使程腥待响应时可的事情,Winsock API 扩充了一组奏同的异步查询函数,不会引铺的阻塞。 并且可以使用Windows的消息驱动模式。也是六庚,与 GetXbyY庚对应,在每庚名前面加上了WSAAsync 前缀,名字采用WSAAsyncGetXByY()的方式。它们的工字圃诤晔3.2.6 WSAAsyncGetXByY类型的扩展变量WSAAsyncGetXByY类型的扩展变量是GetXByY函数的轮询 版本,这些变量可以较好地运用Windows的消息驱动模式。 1.WSAAsyncGetHostByName()函数 HANDLE WSAAsyncGetHostByName ( HWND hWnd, unsigned int wMsg,const char * name, char * buf, int buflen );2.WSAAsyncGetHostByAddr()函数 HANDLE WSAAsyncGetHostByAddr ( HWND hWnd, unsigned int wMsg, const char * addr, int len, int type, char * buf, int buflen );3.WSAAsyncGetServByName()函数 HANDLE WSAAsyncGetServByName ( HWND hWnd, unsigned int wMsg, const char * name, const char * proto, char * buf, int buflen );4.WSAAsyncGetServByPort()HANDLE WSAAsyncGetServByPort ( HWND hWnd, unsigned int wMsg,int port, const char * proto, char * buf, int buflen );5.WSAAsyncGetProtoByName()函数HANDLE WSAAsyncGetProtoByName ( HWND hWnd, unsigned int wMsg,const char * name, char * buf, int buflen );6.WSAAsyncGetProtoByNumber()函数 HANDLE WSAAsyncGetProtoByNumber ( HWND hWnd, unsigned int wMsg, int number, char * buf, int buflen);3.3 网络应用程兴行环境1.开发Windows Sockets网络应用程腥怼⒂布肪 采 用 支 持 Windows Sockets API 的 Windows98SE以上的操壮。
采用可视化和面相程语言, 如Microsoft Visual C++ 6.0采用TCP/IP网络通信协议。网络中的所采取的计算机要满足Windows运 行的配置要求。网络中搞上的计算机需加装网卡,并安 装网卡的驱动程猩以运用以太网交换机 将权计算机建立成局樱在配置网络时,首先推动对等网,使搞 机节点可在“网上邻居”中找到自己跟其他 搞机,并可推动文件资源互相共享。其次,网络配置中,应添加TCP/IP协议, 设定相应的IP地址。2.礽ndows Sockets接口的基本方法引入不同套接字的应用程凶接字函数时,应 奏要的方法。 3 . 使 用 Visual C++ 6.0 进 行 Windows Sockets程孝的其他技抒(1)首先庄处理。(2)通信双方的程猩用统一的界面方式。(3)尽量采取多线程(Multithreaded)编程技术。(4)应充分利用Windows Sockets的基于消息的 网络事件异步选云。第3章结束
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-134632-2.html
真是两难
允许有言论自由