计算机网络编程

上传人:wt****50 文档编号:41825243 上传时间:2018-05-31 格式:PDF 页数:10 大小:415.40KB
返回 下载 相关 举报
计算机网络编程_第1页
第1页 / 共10页
计算机网络编程_第2页
第2页 / 共10页
计算机网络编程_第3页
第3页 / 共10页
计算机网络编程_第4页
第4页 / 共10页
计算机网络编程_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《计算机网络编程》由会员分享,可在线阅读,更多相关《计算机网络编程(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 数据结构数

3、据结构 I/O缓冲区缓冲区APIAPISocket?套接字socket?最初是由加利福尼亚大学Berkeley分校为UNIX操作 系统开发的网络通信接口。?应用编程接口API称为socketAPI, 简称为 socket。?Socket套接字是一种网络编程接口,它定义了一组 标准例行函数,应用程序通过调用这些函数可以和 不同网络中的应用程序进行通信而不必担心网络协 议不同所引发的问题。?socket API中使用的一个函数名也叫作socket。?调用socket函数的端点称为socket。?调用socket函数时其返回值称为socket描述符,可 简称为socket。2Socket?Socke

4、t套接字适合于TCP/IP、XNS等多种网络 协议。?根据所传输数据类型的不同,套接字可分为面 向连接的流式面 向连接的流式套接字和无连接的数据报无连接的数据报套接 字。?面向连接的流式面向连接的流式套接字对应不按定界的数据字节 流,通信双方互相连接,因而它可以保证按正确的 顺序,单一、可靠的传输数据;?无连接的数据报无连接的数据报套接字由于通信双方无连接,将按 固定的最大长度进行数据传输,它不保证按顺序传 输,并可能出现数据的重复或丢失。Socket编程?在网络中,应用程序之间如果要进行网络对 话,都需要经过如下的步骤:?根据需要建立根据需要建立Socket套接字套接字?根据需要对根据需要对

5、Socket进行必要的配置进行必要的配置?调用具体的调用具体的Socket函数读写数据函数读写数据?关闭套接字关闭套接字?一个程序将一段信息写入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

7、联合了其他几家公司共同制定的一套 WINDOWS下的网络编程接口;?它是通过C语言的动态链接库方式提供给用户及软 件开发者的,主要由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对话

8、 框中,点击link选项卡,然后在对象/库模块文 本框中添加wsock32.lib。15Winsock API函数?最简单的网络编程是获取本机的主机名 和IP地址?WSAStart()?WSAClenaup()?gethostname()16WSAStart函数?在使用Winsock函数之前必须成功加载 Winsock库,确保Winsock DLL对 Winsock应用的支持?每一个使用winsock的应用程序,都必须 进行WSAStart函数调用,并且只有在调 用成功之后才能使用其它的winsock网络 操作函数17WSAStart函数int WSAStartup(WORD wVersion

9、Requested,LPWSADATA lpWSAData); wVersionRequested用于指定准备加载的Winsock库的版本 lpWSAData是一个指向WSADATA资料的指针,指向被加载的库版本信息结构 返回值:调用成功返回0;否则,返回出错信息。/ Initialize Winsock version 2.2 WSADATA wsaData; int Ret; /WSAStartup(0x0101, return; 18WSAClenaup函数winsock使用后,要调用WSACleanup函数关闭网络设备, 以便释放其占用的资源。int WSACleanup(void);

10、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是协议的地址族,通常使用IPv4来描述Winsoc

11、k时,该字段设置为 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) = IN

12、VALID_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结构。st

13、ruct sockaddr_in short 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.si

14、n_family = AF_INET; ServerAddr.sin_port = htons(Port); ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);if (bind(ListeningSocket, (SOCKADDR *) closesocket(ListeningSocket); WSACleanup(); return; 26listen函数?使用listen函数将套接字置为监听模式, 等候客户端申请连接。int listen(SOCKET s, int backlog);s是被绑定的套接字backlog标示等待队列的最大长度/ L

15、isten 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 accept(SOCKET s, struct sockaddr FAR*

16、 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, (SOCKADDR *) closesocket(ListeningSocket); WSACleanup(); return; 29send函数int

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

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