计算机网络编程.pdf
《计算机网络编程.pdf》由会员分享,可在线阅读,更多相关《计算机网络编程.pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、11计算机网络编程主讲人:杨巍2网络编程?网络编程?在计算机网络环境下进行应用程序设计或软件开发。?狭义的网络编程是指在操作系统上的套接字(Socket)编程;?广义的网络编程泛指网络环境下的一切程序设计。?Socket程序设计?动态网页设计web程序设计应用层应用层运输层运输层网络层网络层链路层链路层物理层物理层3应用程序的实现结构?客户/服务器工作模式C/S?客户?一般为网络用户的计算机;?处于主动的地位,可以向服务器发出各种请求。?服务器?网络上能够提供特定服务的主机;?处于被动的地位,根据客户的请求做出相应的回答,提供相应的服务。应用层应用层运输层运输层网络层网络层链路层链路层物理层物
2、理层应用程序的实现结构?Application programs come in pairs,client and server.?客户端进程?为用户提供图形用户界面(Graphics User Interface,简称GUI)?根据用户输入的数据和命令向服务器发出请求?将服务器作出的回答进行分析处理、通过GUI提交用户?服务器端进程?为多个客户机提供服务,实现资源共享?提供服务的应用进程提供服务的应用进程?请求通信的客户应用进程请求通信的客户应用进程因 特 网数据结构数据结构I/O缓冲区缓冲区SocketIP,portSocket 数据结构数据结构I/O缓冲区缓冲区APIAPISocket?
3、套接字socket?最初是由加利福尼亚大学Berkeley分校为UNIX操作系统开发的网络通信接口。?应用编程接口API称为socketAPI,简称为socket。?Socket套接字是一种网络编程接口,它定义了一组标准例行函数,应用程序通过调用这些函数可以和不同网络中的应用程序进行通信而不必担心网络协议不同所引发的问题。?socket API中使用的一个函数名也叫作socket。?调用socket函数的端点称为socket。?调用socket函数时其返回值称为socket描述符,可简称为socket。2Socket?Socket套接字适合于TCP/IP、XNS等多种网络协议。?根据所传输数据
4、类型的不同,套接字可分为面向连接的流式面向连接的流式套接字和无连接的数据报无连接的数据报套接字。?面向连接的流式面向连接的流式套接字对应不按定界的数据字节流,通信双方互相连接,因而它可以保证按正确的顺序,单一、可靠的传输数据;?无连接的数据报无连接的数据报套接字由于通信双方无连接,将按固定的最大长度进行数据传输,它不保证按顺序传输,并可能出现数据的重复或丢失。Socket编程?在网络中,应用程序之间如果要进行网络对话,都需要经过如下的步骤:?根据需要建立根据需要建立Socket套接字套接字?根据需要对根据需要对Socket进行必要的配置进行必要的配置?调用具体的调用具体的Socket函数读写数
5、据函数读写数据?关闭套接字关闭套接字?一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。Socket编程?Berkeley socket 纯C语言的?Winsock?在Winsock中,通过动态连接库(DLL)实现Socket接口。?动态连接库winsock.dll中包括了Winsock的部分可执行代码,其余的部分包含在Windows的核心之中。?当应用程序使用Winsock中的函数时,操作系统会加载DLL中有关的可执行代码模块,以便应用程序使用;但所有的应用程序都不需要该函数时,操作系统将自动卸掉该部分的可执行代码模块。
6、大多数的DLL允许多个应用程序同时使用它的内部可执行代码。?Socket类封装了WinSock C+?Vb WinSock控件?Java Socket 10serverclientTCP11serverclientUDP12WinSock网络程序设计主讲人:杨巍313Windows编程技术?函数是Windows C编程的最基本的单位。?Windows C主要使用API函数,而网络编程则主要使用Winsock提供的API函数。?Winsock是90年代初,为了方便网络编程,由Microsoft联合了其他几家公司共同制定的一套WINDOWS下的网络编程接口;?它是通过C语言的动态链接库方式提供给用
7、户及软件开发者的,主要由winsock.h头文件和动态链接库winsock.dll组成,目前有两个版本:Winsock1.1和Winsock2.0。14Winsock编程?用Visual C+6.0编译Windows C程序,使用Winsock API函数时,首先要把wsock32.lib添加到它的库模块中,否刚在链接的时候,会出现“error LNK2001”错误。?添加wsock32.lib的具体步骤是:打开工程菜单,选择设置,在弹出的Project settings对话框中,点击link选项卡,然后在对象/库模块文本框中添加wsock32.lib。15Winsock API函数?最简单的
8、网络编程是获取本机的主机名和IP地址?WSAStart()?WSAClenaup()?gethostname()16WSAStart函数?在使用Winsock函数之前必须成功加载Winsock库,确保Winsock DLL对Winsock应用的支持?每一个使用winsock的应用程序,都必须进行WSAStart函数调用,并且只有在调用成功之后才能使用其它的winsock网络操作函数17WSAStart函数int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);wVersionRequested用于指定准备加载的Winsock库的版本
9、 lpWSAData是一个指向WSADATA资料的指针,指向被加载的库版本信息结构 返回值:调用成功返回0;否则,返回出错信息。/Initialize Winsock version 2.2WSADATA wsaData;int Ret;/WSAStartup(0 x0101,&wsaData)if(Ret=WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(WSAStartup failed with error%dn,Ret);return;18WSAClenaup函数winsock使用后,要调用WSACleanup函数关闭网络设备,以便释放其占用的资
10、源。int WSACleanup(void);419gethostname函数int gethostname(char*name,int namelen);该函数可以获取本地主机的主机名,其中:name:用于指向所获取的主机名的缓冲区的指针。Namelen:缓冲区的大小,以字节为单位。返回值:若无错误,返回0;否则,返回错误代吗。20流套接字编程21编写TCP服务器?socket()?bind()?listen()?accept()?send()?rev()22socket函数SOCKET socket(int af,int type,int protocol);af是协议的地址族,通常使用I
11、Pv4来描述Winsock时,该字段设置为AF_INET,表示该socket处于Internet域。type是协议的套接字类型SOCK_STREAM表示使用TCP/IP创建套接字SOCK_DGRAM表示使用UDP/IP创建套接字 protocol用于在给定的地址族和套接字类型具有多重入口时,对具体的传送作限定。/Create a new socket to listening for client connections.SOCKET ListeningSocket;if(ListeningSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)=INVAL
12、ID_SOCKET)printf(socket failed with error%dn,WSAGetLastError();WSACleanup();return;23bind函数?需要使用函数bind将本地地址绑定到创建的套接字上int bind(SOCKET s,const struct socaddr*name,int namelen);s表示被绑定的套接字name表示套接字的地址namelen表示地址结构的长度24SOCKADDR_IN套接字地址?通常会选择SOCKADDR_IN结构来描述套接字地址,使用的时候再强制转换成SOCKADDR结构。struct sockaddr_insh
13、ort sin_family;unsigned shortsin_port;struct in_addrsin_addr;charsin_zero8;sin_family要设置为AF_INETsin_port用来指定服务端口sin_addr用来保存IP地址sin_zero无实际用处525SOCKADDR_IN套接字地址/Associate the address information with the socket using bind.intPort=5150;SOCKADDR_IN ServerAddr;ServerAddr.sin_family=AF_INET;ServerAddr.s
14、in_port=htons(Port);ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(ListeningSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr)=SOCKET_ERROR)printf(bind failed with error%dn,WSAGetLastError();closesocket(ListeningSocket);WSACleanup();return;26listen函数?使用listen函数将套接字置为监听模式,等候客户端申请连接。int listen(SOC
15、KET s,int backlog);s是被绑定的套接字backlog标示等待队列的最大长度/Listen for client connections.We used a backlog of 5.if(listen(ListeningSocket,5)=SOCKET_ERROR)printf(listen failed with error%dn,WSAGetLastError();closesocket(ListeningSocket);WSACleanup();return;27accept函数?处于监听状态的套接字通过调用accept函数做好接收客户连接的准备SOCKET accep
16、t(SOCKET s,struct sockaddr FAR*addr,int FAR*addrlen);s表示处于监听状态的被绑定的套接字addr是一个有效的SOCKADDR_IN结构的地址addrlen是该结构的长度28accept函数/Accept a new connection when one arrives.SOCKADDR_IN ClientAddr;SOCKET NewConnection;intClientAddLen;ClientAddrLen=sizeof(ClientAddr);if(NewConnection=accept(ListeningSocket,(SOCK
17、ADDR*)&ClientAddr,&ClientAddrLen)=INVALID_SOCKET)printf(accept failed with error%dn,WSAGetLastError();closesocket(ListeningSocket);WSACleanup();return;29send函数int send(SOCKET s,const char FAR*buf,int len,int flags);s是即将发送数据的套接字buf指向字符缓冲区len记录即将发送的字符数或者缓冲区的大小flags通常置0SOCKET NewConnection;send(s,Hello
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 编程
限制150内