第12章 Windows Sockets API简介
12.1 填空
套接字一般分三种类型:字节流套接字(Stream Socket)、数据报套接字(Datagram Socket)、原始套接字(Raw Socket)。
在所有基于Windows Sockets的程序里,初始化函数WSAStartup()和终止函数WSACleanup()是必须使用的。
如果使用1.1版的Windows Sockets,那么WSAStartup()函数第一个参数应该取值0x101。
Windows Sockets提供了函数WSAGetLastError()来获取最近的错误码。 创建套接字使用socket()函数。
socket()函数的第二个参数决定套接字的类型,字节流套接字取值SOCK_STREAM,数据报套接字取值SOCK_DGRAM,原始套接字取值SOCK_RAW。
socket()函数出错返回INVALID_SOCKET。 关闭套接字使用closesocket()函数。
将套接字绑定到一个已知地址使用bind()函数。 bind()函数出错返回SOCKET_ERROR。 指示一个套接字等待连接使用listen()函数。 listen()函数出错返回SOCKET_ERROR。 接受客户连接是通过accept()函数来完成的。 accept()函数出错返回INVALID_SOCKET。
客户端通过调用connect()函数来完成同服务器端的连接。 connect()函数出错返回SOCKET_ERROR。
若无错误发生,send()函数返回实际发送的字节数;若发生错误,返回SOCKET_ERROR。
若无错误发生,recv()函数返回读入的字节数;如果连接已中止,返回0;如果出错返回SOCKET_ERROR。
若无错误发生,sendto()返回所发送数据的总数;否则返回SOCKET_ERROR错误。 若无错误发生,recvfrom()返回读入的字节数;如果连接已中止,返回0;否则返回SOCKET_ERROR错误。
gethostbyname()函数返回与指定的主机名对应的主机信息。 gethostbyaddr()函数返回与IP地址相应的主机信息。
220
第13章 TCP Socket编程
13.1 填空
填写TCP流程的空缺:
Serversocket()bind() linsten() accept() recv()send()Data (request)Data (reply)Clientsocket()connect() send()recv()closesocket() closesocket()221
第14章 UDP Socket编程
14.1 填空
填写UDP流程的空缺:
Serversocket() bind() recvfrom()sendto()Data (request)Data (reply)Clientsocket()bind() sendto()recvfrom()closesocket() closesocket()222
第15章 Raw Socket编程
15.1 问答
15.1.1 论述网卡的工作模式。
1) 广播模式(Broad Cast Model):它的物理地址(MAC)地址是 0Xffffff 的帧为广播帧,工作在广播模式的网卡接收广播帧。
2)多播传送(MultiCast Model):多播传送地址作为目的物理地址的帧可以被组内的其他主机同时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。
3)直接模式(Direct Model):工作在直接模式下的网卡只接收目地址是自己 Mac地址的帧。
4)混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。
网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。如果采用混杂模式,一个站点的网卡将接受同一网络内所有站点所发送的数据包这样就可以到达对于网络信息监视捕获的目的。
223

