【vb精品源码栏目提醒】:网学会员--在 vb精品源码编辑为广大网友搜集整理了:Window网络与通信程序设计试题 - 基础科学绩等信息,祝愿广大网友取得需要的信息,参考学习。
作业1 1、使用API函数描述基于TCP的服务器和客户端程 序的基本流程。
Server:WSAStartup socket bind listen accept recv /send closesocket WSACleanup Client:WSAStartup socket connect send/recv closesocket WSACleanup 2012-5-18 1 2、调用connect()时触发什么过程?UDP编程时可 否调用connect(),为什么? A:触发三次握手过程。
UDP编程时可以调用connect 因为在数据报套接字上调用connect 不会触发 三次握手过程,操作系统仅仅将连接地址保存后直 接返回,后续调用sendto时可以不填入目标地 址。
2012-5-18 2 3、UDP通信时需要将收到的信息回送给对方该怎么处 理?给出实现代码。
char recvbuf256 int recvbytes,sendbytes sockaddr_in addr int len sizeofaddr recvbytes recvfromsrecvbuf2560sockaddraddrlen sendbytes sendtosrecvbufstrlenrecvbuf0sockaddraddrlen //判断返回值2012-5-18 3 4、调用recvfrom()之前是否必须显式绑定?为 什么? A:不一定需要显式绑定。
如果在调用recvfrom之 前调用了sendto则可以不显式绑定。
2012-5-18 4 5、4个数据收发函数可否都在TCP和UDP通信中使用 ?请比较使用时注意事项。
A:都可以。
(1)sendto和recvfrom在UDP通信中以及 send和recv在TCP通信中按照常规使用方式。
(2)send在UDP通信中需先调用connectrecv 在UDP通信中需先调用bind。
(3)sendto和recvfrom在TCP通信中,只需将后 两个参数设为0即可。
2012-5-18 5 作业2 从以下方面比较WSAAsyncSelect模型和 WSAEventSelect模型的异同。
1、能处理的网络事件类型 2、得到网络事件通知的途径 3、单线程能处理的套接字个数 4、判断网络事件类型和网络错误方法 5、触发FD_READ和FD_WRITE的条件(具体说明)2012-5-18 61、能处理的网络事件类型 相同,常用网络事件包括FD_ACCEPT、FD_READ、 FD_WRITE、FD_CLOSE等2、得到网络事件通知的途径 不同。
WSAAsyncSelect模型由操作系统捕获网络事 件并封装成WINDWOS消息,发送到窗口程序的消息队 列中,应用程序从其消息队列中取出消息从而获得 网络事件通知;而WSAEventSelect模型是通过等待 关联的事件状态变化来获取事件通知。
3、单线程能处理的套接字个数 不同,WSAEventSelect模型为64, WSAAsyncSelect 模型没有限制。
2012-5-18 74、判断网络事件类型和网络错误方法 不同。
WSAEventSelect模型通过调用 WSAEnumNetworkEvents函数传入的指向 WSANETWORKEVENTS结构体的指针lpNetworkEvents来 返回网络网络事件和错误代码。
iflpNetworkEvents- lNetworkEvents FD_, 则表示发生了对应的网络事件; iflpNetworkEvents-iErrorCodeFD__BIT0 表示发生了网络错误。
2012-5-18 8 WSAAsyncSelect模型通过MSG的附加信息来判断网 络事件和网络错误。
wParam指定发生网络事件的套接字句柄 LParam指定发生的网络事件和错误代码。
其中高字位指出网络错误。
采用宏: ifWSAGETSELECTERRORlParam表示发生网络错 误 低字位指出发生的网络事件,采用宏: ifWSAGETSELECTEVENTlParam FD_表 示发生对应的网络事件。
2012-5-18 9 5、触发FD_READ和FD_WRITE的条件(具体说明) 收到FD_READ事件通知的情况: (1)调用 WSAAsyncSelect对 socket 注册 FD_READ 事件时,接收缓冲区中已有数据。
(2)接收缓冲区由空变为有数据 (3)调用 recv或 recvfrom从接收缓冲区读 取数据时没有读完。
2012-5-18 10 收到FD_WRITE事件通知的情况: ①使用connect或WSAConnect,一个套接字首次建 立了连接。
针对客户端 ②使用accept或WSAAccept,套接字被接受以后。
③若send、WSASend、sendto或WSASendTo操作失 败,返回了WSAEWOULDBLOCK错误,而且缓 冲区的空间变得可用。
2012-5-18 11 作业3 Q:在TCP服务器编程时,可以对每个accept()返回的套接 字创建线程来处理该套接字上的数据收发,这样做有什么 缺点?第三章的IO模型中哪