b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

网络编程实用教程(第2版)_网络信息安全实用教程_网络编辑实用教程

电脑杂谈  发布时间:2019-12-25 18:01:49  来源:网络整理

网络编程实用教程(第2版)_网络编辑实用教程_网络信息安全实用教程

第3章 Windows环境的网络编程介绍了Windows Sockets 规范, 说胕nSock 规范与Berkeley套接口的区钡胕nsock 1.1 的库函数。 3.1 Windows Sockets规范 3.1.1 概蔯rosoft公司以Berkeley Sockets规范为范 例,定义了Windows Socktes规范,糤insock规范。这是Windows操壮环境下的 套接字网络应用程刑接口(API)。图3.1 网络应用进程利用Windock进行通信3.1.2 Windows Sockets规范Windows Sockets 规范是一套开放的、支 持多种协议的Windows下的网络编程接口。从 1991年到1995年,从1.0版发展至2.0.8版, 已变成Windows网络编程的事实上的标准。1.Windows Sockets 1.1版本在Winsock.h包含文件中,定义了所有 WinSock 1.1版本库函数的句型、相关的符号 常量和数据结构。库函数的实现在 WINSOCK.DLL动态链接库文件中。( 1 ) WinSock 1.1 全 面 继 承 了 Berkeley Sockets规范,见表 3.1(2)函数表3.2列砳nsock规范定义的查询实例。

其中六该getXbyY()的方式,椽借助网络上 的来慌息,(3)WinSock 1.1 扩充了Berkeley Sockets规 范针对微软 Windows的特征,WinSock 1.1定义了一 批新的库函数网络编程实用教程(第2版),提供了针对消息驱动模式的支持,有 效地运用Windows多任芜程的模式。见表3.3 (4)WinSock 1.1只支持TCP/IP协议栈2.WinSock 2.0WinSock 2.0在源码和二进制代码方面与WinSock 1.1兼容, WinSock 2.0运许。(1)支持多种协议(2)引入了重叠I/O的概念 (3)使用事件对辖通知 (4)服问量(QOS) (5)套接口组(6)扩展的字节顺谢例程(7)分散/聚集方式I/O (8)新皂多函数。3.WinSock 1.1中的阻塞问题阻塞是在把应用程衑rkeley套接口环境中移植 到Windows环境中的一釜焦点。阻塞是指唤聘煤钡较喙夭僮墒辈欧祷亍 在Berkeley套接口模型中,一赣口的操妆 省行为是阻塞模式的,除非程性式地请琴追亲枞绞健 在Windows环境下,我们极力推稼尽可 能的情抗用非阻塞模式(异步方法)的操追亲枞绞降牟僮桓玫卦诜钦枷鹊腤indows 环境下工作。

3.1.3 WinSock规范与Berkeley套接口的差别1.套接口数据类别和该种类的错呜值 在UNIX中,包括套接口句柄在内的所有线程,都是非负 的短整数, 在 WinSock 规 范 中 定 义 了 一 的 数 据 类 型 , 称 證KET,用来代表套接字描剩typedefu_intSOCKET;SOCKET可以取从0到INVALID_SOCKET-1之间的任意值。 2.select()函数和FD_*宏 在Winsock中,使用select()函数时,应用程嗅持用 FD_XXX宏来修改,朝,清除和检查fd_set结构。3.错坞的获取在UNIX 套接字规范中,如果变量执行时出现了错吾把 错坞放到errno籸rno变量中。 在Winsock中,错坞可以使用WSAGetLastError()档玫健 4.指针所有应用程衖ndows Sockets使用的指针都需要是 FAR指针。5.重命名的变量(1)close()改变为closesocket()(2)ioctl()改变为ioctlsocket()6.Winsock支持的更从口数量 在 WINSOCK.H 中 缺 省 值 是 64 , 在 编 译 时 由 常 量 FD_SETSIZE荆 7.头文件 Berkeley头文件被包括在WINSOCK.H中。

网络信息安全实用教程_网络编程实用教程(第2版)_网络编辑实用教程

一竏ows Sockets应用程需钾包含WINSOCK.H就足够了。 8.Winsock规范针对消息驱动机制的支持 体现在异步选云、异步请驱、阻塞处理方式、错 雾、仆终止等方面。3.2 Winsock 1.1的库函数 3.2.1 Winsock的注册与注销 1.朝函数WSAStartup() Winsock 应 用 程 第 一 件 事 , 就 是 必 须 首 先 WSAStartup()函数对Winsock进行朝。朝也称为注 册。注册成功号可典他的Winsock API函数。 (1)WSAStartup()函数的礽nt WSAStartup( WORD LPWSADATA lpWSAData ); wVersionRequested,(2)WSAStartup()函数的朝过程 图3.2说茂的过程图3.2 在一台计算机中,使用同一Windock实现的多哥应用程序(3)WSADATA结构的定义 #define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char * lpVendorInfo; } WSADATA;(4)朝函数也许返回的错坞WSASYSNOTREADY: 网络通讯依赖的网络子系统没有准备好。

WSAVERNOTSUPPORTED:找不到所需的Winsock API相应的动态连接库。 WSAEINVAL:DLL不支持应用程需的Winsock版本。WSAEINPROGRESS: 正在执行一耕的Winsock 1.1操譝SAEPROCLIM: 已经超过Winsock支持的任蜗限。 WSAEFAULT: 参数lpWSAData不是合法指针。(5)朝Winsock的示例#include <winsock.h> // 对于Winsock 2.0,应包含 Winsock2.h文件aa() {WORD wVersionRequested; // 应用程需的Winsock版本号 WSADATA wsaData; // 用来返回Winsock 实现的细节信息。 Int err; // 锄码。wVersionRequested =MAKEWORD(1,1); 版本号1.1。// 生成err = WSAStartup(wVersionRequested, &wsaData ); // 弹函数。 if (err!=0 ) { return;} DLL文件。 / / 通知用户找不到合适的// 确认返回的版本号是用户要?1 if ( LOBYTE(wsaData.wVersion HYBYTE(wsaData.wVersion )!=1) { WSACleanup(); return; } /* 至此,可以确定朝成功,Winsock.DLL可用。

} )!=1 ||2.注销函数WSACleanup() 当程忻完Winsock.DLL提供的服维应用程须礧SACleanup()函数,来解除与Winsock.DLL库的艾释 放Winsock实现分配给应用程械统资源,中止对Windows Sockets DLL的使用。 int WSACleanup ( void );3.2.2 Winsock的错雾函数1.WSAGetLastError()函数 int WSAGetLastError ( void );本函数返回本线程进行的上一次Winsock函数当的错温搿2.WSASetLastError()函数 void WSASetLastError ( int iError );本函数允许应用程斜前线程修改错坞,并能由旱腤SAGetLastError()档回。3.2.3 帜Winsock函数 1.创建套接口SOCKET() SOCKET socket (int af, int type, int protocol); 举例:SOCKET sockfd=SOCKET( AF_INET, SOCK_STREAM, 0); /* 创建一附套接字。

网络编辑实用教程_网络信息安全实用教程_网络编程实用教程(第2版)

SOCKET sockfd=SOCKET( AF_INET, SOCK_DGRAM, 0); /* 创建一篙报套接字。2.将套接口敖指定的网络地址BIND() int bind( SOCKET s, int namelen); const struct sockaddr * name,相关的三种Winsock地址结构有许多函数都必须套接字的地址信息网络编程实用教程(第2版),蟈 套接字一样, Winsock也定义了三种关于地址的结构,经常使用。 ①通用的Winsock地址结构,针对辅信幼接字,存储 它们的地址信息。 struct sockaddr { u_short sa_family; char sa_data[14]; /* 地址家族 /* 协议地址}②专门针对Internet 通信觟nsock地址结构 struct sockaddr_in { short. AF_INET. sin_family; /* 指定地址家族,一定是 /* 指定将会分配给套接字的 /* 指定套接字的帜u_short sin_port; 传输层端口号,struct in_addr sin_addr; IP 地址 char }sin_zero[8]; /* 全置为0,是一镐数。

③专用于存储IP地址的结构 Struct in_addr { Union { Struct {u_char s_b1,s_b2,s_b3,s_b4;} S_un_b; Struct {u_short s_w1,s_w2;} S_un_w; U_long S_addr; } } 在使用Internet幼接字时,这三篙结构的通常用法 是: 首先,定义一竗addr_in的结构示例函数,并将它清零。 然邯这腹的副函数赋值, 第三步,在礗ND()隘数时,将指瞎的指针 强制转化为 sockaddr*类型。举例:SOCKET serSock; sockaddr_in my_addr; 构例子变量。 int err; // 定义了一窴ET 类型的变量。 // 定义一竗addr_in型的结// 畴。int slen=sizeof( sockaddr); // sockaddr 结构的长度。serSock = SOCKET(AF_INET, SOCK_DGRAM,0 ); 创建数据报套接字。memset(my_addr,0); 的结构示例函数清零。 my_addr.sin_family = AF_INET; 是Internet。

my_addr.sin_port = htons(21); 将端口号转换为网络字节排序。//// 将Sockaddr_in // 指定通信 指定端口,/* 指定IP地址,将IP地址转换为网络字节顺衜y_addr.sin_addr.s_addr = htonl( INADDR-ANY); /* 将套接字敖指定的网络地址,对&my_addr进行了强 制类型转换。 if (BIND(serSock, (LPSOCKADDR )&my_addr, slen) == SOCKET_ERROR ) { /* 礢AGetLastError()函数,活近一疙温搿 err = WSAGetLastError(); /* 以下可以报错,进行错雾。}3.掐梧听客户端的连接请荰EN() int listen( SOCKET s, int backlog); 4.接收连接请荂EPT()SOCKET accept( SOCKET s, struct sockaddr* addr, int* addrlen); 5.请怯CONNECT() int connect( SOCKET s, struct sockaddr * name, int namelen);举例struct sockaddr_in daddr; memset((void *)&daddr,0,sizeof(daddr));daddr.sin_family=AF_INET;daddr.sin_port=htons(8888); daddr.sin_addr.s_addr=inet_addr("133.197.22.4"); connect(ClientSocket,(struct sockaddr *)&daddr,sizeof (daddr));6.犀接的套接口发送数据SEND() int send( SOCKET s, char * buf, int len, int flags);图3.3 同步套接字的Send()函数的执行步骤7.从一脯接套接口接收数据RECV() int recv( SOCKET s, char * buf, int len, int flags); 图3-4说胑nd和recv的赚套接字缓冲区与应用进程缓 冲区的关系,以及协议栈所撰送。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-134632-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...