计算机网络程序设计程序总结

上传人:我** 文档编号:115953650 上传时间:2019-11-15 格式:DOC 页数:16 大小:353KB
返回 下载 相关 举报
计算机网络程序设计程序总结_第1页
第1页 / 共16页
计算机网络程序设计程序总结_第2页
第2页 / 共16页
计算机网络程序设计程序总结_第3页
第3页 / 共16页
计算机网络程序设计程序总结_第4页
第4页 / 共16页
计算机网络程序设计程序总结_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《计算机网络程序设计程序总结》由会员分享,可在线阅读,更多相关《计算机网络程序设计程序总结(16页珍藏版)》请在金锄头文库上搜索。

1、 北京联合大学 信息学院 网 络 程 序 设 计 课 程 总 结 姓 名:吴 迪 学 号:2011080332208 班 级:计算机1101B 专 业:计算机科学与技术一:控制台开发同步阻塞模式相关函数原型和参数说明Winsock提供了两种套接字模式:阻塞模式和非阻塞模式。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数(比如send和recv)会一直等候下去,不会立即返回。阻塞模式WindowsSockets在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数将一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字

2、函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。在阻塞模式的套接字上,调用任何一个WindowsSockets API都会消耗不确定的等待时间。在调用recv()时,发生在内核中等待数据和复制数据的过程如下:当调用recv()时,系统首先检查是否有准备好的数据。如果数据没有准备好,系统就处于等待状态。当数据准备好后,将数据从系统缓冲区复制到用户空间,然后该函数返回。在套接应用程序中,当调用recv()时,用户空间未必就已经存在数据,此时recv()函数就是会处在等待状态。1. 输入操作:recv(),recvfrom(),WSARecv(),WSARecvfrom()。以阻塞

3、套接字为参数调用这些函数接收数据,如果此时套接字缓冲区内没有数据可读,则调用线程在数据到来前一直睡眠。2. 输出操作:send(),sendto(),WSASend(),WSASendto()。以阻塞套接字为参数调用这些哈思楠发送数据。如果套接字缓冲区没有可用空间,线程会一直睡眠,直到有空间。3. 接收连接:accept(),WSAAcept()。以阻塞套接字为参数调用这些函数,将等待接受对方的连接请求,如果此时没有连接请求,线程就会进入睡眠状态。4. 外出连接:connect(),WSAConnect()。对于TCP连接,客户端以阻塞套接字为参数,调用这些函数向服务器发起连接。该函数在收到服

4、务器的应答前,不会返回。这就意味着TCP连接总会等待至少从客户端到服务器的一次往返的时间。二:控制台TCP协议应用基本步骤和说明TCP协议是基于面向连接的可靠的通信协议。其具有重发机制,即当数据被破坏或者丢失时,发送方将重发该数据。 三:控制台UDP协议应用基本步骤和说明UDP协议是基于用户数据报协议,属于不可靠连接通信的协议。例如,当用户使用UDP协议发送一条消息时,并不知道该消息是否已经到达接收方,或者在传输过程中数据已经丢失。但是在即时通信中,UDP协议在对一些对时间要求较高的网络数据传输方面有着重要的作用。基于UDP的网络程序是面向无连接,不可靠的一种应用程序。所以,当程序创建套接字句

5、柄成功以后,便可以直接调用函数进行数据收发,最后,关闭套接字对象。在整个过程中,程序都不用调用任何函数连接服务器或者接受客户端的连接等操作。这种类型的应用程序多用在即时通信中。UDP函数sendto:int sendto (/发送函数 SOCKET s, /套接字句柄 const char FAR * buf,/数据缓冲区 int len,/数据的长度 int flags, /一般设置为0 const struct sockaddr FAR * to,/目标地址结构信息 int tolen /目标地址结构大小 );int recvfrom (SOCKET s, char FAR* buf, i

6、nt len, int flags,struct sockaddr FAR* from, int FAR* fromlen);/接收函数四:对话框开发异步选择模型相关函数原型和参数说明 WSAAsyncSelect模型是WinSock中另一个常用的异步I/O模型。该模型可在套接字上接收以Windows消息为基础的网络事件通知。调用WSAAsyncSelect函数自动将套接字设置为非阻塞模式,并向WinSock DLL注册一个或多个感兴趣的网络事件,同时提供接收通知时使用的窗口句柄,当注册的网络事件发生时,对应的窗口将收到一个基于消息的通知函数。WSAAsyncSelect()的作用是将用户指定

7、的套接字对象设置为异步模式。该函数的原型如下:int WSAAsyncSelect ( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent );参数s表示需要设置为异步模式的套接字句柄。参数hWnd表示接收消息响应的窗口句柄。参数wMsg表示响应消息标识。参数lEvent表示发生在该套接字上的事件用于WSAAsyncSelect函数的网络事件类型取 值意 义FD_READ套接字上发生读取事件FD_WRITE套接字上发生写入事件FD_ACCEPT套接字上发生连接事件FD_CLOSE套接字上发生关闭事件FD_CONNECT套接字上发生已连接事件在

8、使用该函数设置异步套接字之前,用户首先需要定义一个自定义消息并为其关联消息响应函数。例如,在本节中将定义消息WM_SOCKET,与该消息关联的消息响应函数为OnSocket()。然后,用户在程序初始化函数中使用函数WSAAsyncSelect()将套接字设置为异步模式。WSAAsyncSelect(s,this-m_hWnd, WM_SOCKET, FD_ACCEPT| FD_READ)/设置异步套接字将异步套接字设置成功后,需要实现套接字消息响应函数OnSocket()。void CMy2Dlg: OnSocket(WPARAM wParam,LPARAM lParam) switch(lP

9、aram) case FD_READ:/处理套接字接收事件 . /省略部分代码case FD_ACCEPT:/处理套接字连接事件 . /省略部分代码根据消息参数lParam判断具体发生的套接字事件,然后再根据该事件进行相应的处理。用法举例:要接收读写通知:#define WM_SOCKET WM_USER + 101 int nResult = WSAAsyncSelect(s,hWnd,WM_SOCKET,FD_READ|FD_WRITE); if(nResult=SOCKET_ERROR) /错误处理 五:对话框TCP协议应用基本步骤和说明TCP客户端:1.初始化套接字库:WSAStart

10、up(1,1)2.创建套接字sockSvr=socket(SOCK_STREAM)3.指明服务器SOCKADDR_INaddrSrv=IP:60014.NULL5.发出连接请求connect(sockClient,addrSrv)6.接受服务端数据recv(sockClient)阻塞7.发数据到服务端send(sockClient)8.NULL9.关闭连接closesocket(sockClient)10.释放套接字库资源WSACleanup()TCP服务器端:1.初始化套接字库:WSAStartup(1,1)2.创建套接字sockSvr=socket(SOCK_STREAM)3.绑定套接字到

11、端口bind(6001)4.开始监听客户端listen(sockSvr,5)5.接受客户端连接请求sockConn=accept(sockSvr)阻塞6.向客户端发送数据send(sockConn)7.接受客户端数据recv(sockConn)阻塞 8.关闭客户端连接closesocket(sockConn)9.关闭服务端连接closesocket(sockSvr)10.释放套接字库资源WSACleanup()六:对话框UDP协议应用基本步骤和说明UDP客户端:1. 初始化套接字库WSAStartup(1,1)2. 创建套接字sockSvr=socket(SOCK_STREAM)3.指明服务器

12、SOCKADDR_INaddrSrv=IP:60014.NULL5.NULL6.发数据到服务端sendto(sockClient,addrSrv)7.接受服务端数据recvfrom(sockClient,&addrSrv)阻塞8.NULL9.关闭连接closesocket(sockClient)10.释放套接字库资源WSACleanup()UDP服务器端:1.初始化套接字库WSAStartup(1,1)2.创建套接字sockSvr=socket(SOCK_STREAM)3.绑定套接字到端口bind(6001)4.NULL5.NULL6.接受客户端数据recvfrom(sockSvr,&addr

13、Client)7.发数据到客户端sendto(sockSvr,addrClient)8.NULL9.关闭套接字closesocket(sockSvr)10.释放套接字库资源WSACleanup()七:多线程Scoket编程技术基本步骤和说明在Windows操作系统中,所有程序的功能都是由每个程序中的多个线程共同完成。从某种特定的意义上而言,线程才是计算机真正意义上的功能执行者。而从线程执行的数目而言,线程可以分为单线程和多线程。其中,多线程是由多个单线程组成。如果从线程的执行效率而言,多线程比单线程的执行效率高很多。那么,当用户在编程时,使用多线程技术可以提高程序的执行效率。用户编程时,使用多

14、线程技术需要首先创建线程,然后再使用这些线程执行相应的功能。如果用户是在VC中编写多线程程序,则可以调用API函数CreateThread()创建线程。该函数原型如下:该函数的作用是用于创建一个线程,并将返回该线程的句柄。HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId );lpThreadAttributes是一个指向结构体SECURITY_ATTRIBUTES的指针,表示指定新建线程的安全属性。NULL表示创建线程时使用默认的安

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号