第21章Linux网络通信高级编程Socket.pdf

上传人:asd****56 文档编号:70322620 上传时间:2023-01-19 格式:PDF 页数:38 大小:1.21MB
返回 下载 相关 举报
第21章Linux网络通信高级编程Socket.pdf_第1页
第1页 / 共38页
第21章Linux网络通信高级编程Socket.pdf_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《第21章Linux网络通信高级编程Socket.pdf》由会员分享,可在线阅读,更多相关《第21章Linux网络通信高级编程Socket.pdf(38页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Linux操作系统精讲操作系统精讲大连理工大学软件学院大连理工大学软件学院邱铁邱铁综合楼综合楼413,Tel:0411-87571632E_mail:参考教材:参考教材:?Linux应用与开发典型实例精讲邱铁、于玉龙、徐子川编著应用与开发典型实例精讲邱铁、于玉龙、徐子川编著.清华大学出版社清华大学出版社.2010.5第第13章 模块机制与操作章 模块机制与操作学习本章要达到的目标:学习本章要达到的目标:?1.了解网络通信的基本知识;了解网络通信的基本知识;?2.熟悉熟悉TCP协议的协议的Socket工作原理;工作原理;?3掌握在掌握在QT 4.5的网络通信操作接口;的网络通信操作接口;?4学会

2、在学会在QT 4.5下进行网络通信程序的编写方法。下进行网络通信程序的编写方法。21.1 网络编程概述网络编程概述?回顾OSI七层模型:?物理层物理层?数据链路层数据链路层?网络层网络层?传输层传输层?会话层会话层?表示层表示层?应用层应用层?TCP/IP四层结构四层结构?数据链路层数据链路层?数据链路层是实现网络通信的基础数据链路层是实现网络通信的基础?完成直连在同一网络中的不同计算机之间的通信完成直连在同一网络中的不同计算机之间的通信?它采用它采用MAC地址进行通信,地址进行通信,MAC地址是网络硬件设备在生产时所固定的地址地址是网络硬件设备在生产时所固定的地址?网络层网络层?网络层实现了

3、网络上任意两台计算机之间的通信网络层实现了网络上任意两台计算机之间的通信?一般采用可以方便路由的一般采用可以方便路由的IP地址作为通信地址地址作为通信地址?通过通过ARP协议同协议同MAC地址进行转换地址进行转换?TCP/IP四层结构(续)四层结构(续)?传输层传输层?实现了两个进程之间的通信实现了两个进程之间的通信?主要采用主要采用TCP协议和协议和UDP协议协议?采用采用IP地址与端口号(地址与端口号(Port)来进行通信)来进行通信?应用层应用层?在在TCP和和UDP协议之上实现的不同的协议,根据不同的应用存在有很多协议,为用户提供多种应用协议之上实现的不同的协议,根据不同的应用存在有很

4、多协议,为用户提供多种应用?例如例如HTTP、FTP、DNS、SSH等等等等?网络编程的实质就是在在传输层之上利用网络编程的实质就是在在传输层之上利用TCP协议或协议或UDP协议实现一种新的协议;或者直接利用现有的应用层协议实现一种应用协议实现一种新的协议;或者直接利用现有的应用层协议实现一种应用?两种开发模式两种开发模式?C/S模式模式?客户端客户端服务器模式服务器模式?B/S模式模式?浏览器浏览器服务器模式服务器模式21.2 Socket编程模型编程模型?Socket是一个是一个IP地址和一个端口的组合,它由操作系统分配,是一个通信句柄。地址和一个端口的组合,它由操作系统分配,是一个通信句

5、柄。?在进行网络通信的过程中,首先应用程序会申请一个在进行网络通信的过程中,首先应用程序会申请一个Socket,之后应用程序通过申请得到的,之后应用程序通过申请得到的Socket进行网络通信,通信结束后应用程序关闭进行网络通信,通信结束后应用程序关闭Socket,操作系统会做出相应的资源回收工作。,操作系统会做出相应的资源回收工作。?服务器端需要使用多线程技术以完成对多个客户端的同时服务服务器端需要使用多线程技术以完成对多个客户端的同时服务?Socket基本流程基本流程?首先要建立一个首先要建立一个Server(服务器),并设置服务器侦听的端口号(服务器),并设置服务器侦听的端口号?客户端向操

6、作系统申请一个客户端向操作系统申请一个Socket,并说明需要连接的目标,并说明需要连接的目标IP和端口号和端口号?客户端发起连接客户端发起连接?当服务器端的当服务器端的Server发现有连接请求以后,服务器端如果接受连接请求,会生成一个发现有连接请求以后,服务器端如果接受连接请求,会生成一个Socket,?双方通过各自的双方通过各自的Socket通信通信?如果通信完成,可单方关闭如果通信完成,可单方关闭Socket21.3 QT网络编程中用到的类和方法网络编程中用到的类和方法?Socket操作相关的类操作相关的类?QTcpSocket?QTcpServer?多线程操作相关的类多线程操作相关的

7、类?QThread21.3.1 QTcpSocket?定义头文件:定义头文件:QTcpSocket。?说明:说明:QTcpSocket很好的实现了很好的实现了TCP协议的面向连接和流传输等特性。协议的面向连接和流传输等特性。?主要方法:主要方法:?连接到服务器连接到服务器void connectToHost(const QString&hostName,quint16 port,OpenModeopenMode=ReadWrite);void connectToHost(const QHostAddress&address,quint16 port,OpenModeopenMode=ReadW

8、rite);?主要方法(续):主要方法(续):?与服务器中断连接与服务器中断连接void disconnectFromHost();?获取获取Socket连接状态连接状态SocketState state()const;?获取本地地址和端口获取本地地址和端口QHostAddress localAddress()const;quint16 localPort()const;?获取目标机的地址、名称和端口获取目标机的地址、名称和端口QHostAddress peerAddress()const;QString peerName()const;quint16 peerPort()const;?主要方

9、法(续):主要方法(续):?获取本地地址和端口获取本地地址和端口QHostAddress localAddress()const;quint16 localPort()const;?等待数据到达等待数据到达bool waitForReadyRead(int msecs=30000);?从缓冲流中读取一个字符从缓冲流中读取一个字符bool getChar(char*c);?向缓冲流中写入一个字符向缓冲流中写入一个字符bool putChar(char c);?主要方法(续):主要方法(续):?从缓冲流中读取一段数据从缓冲流中读取一段数据qint64 read(char*data,qint64 m

10、axSize);QByteArray read(qint64 maxSize);QByteArray readAll();?向缓冲流中写入数据向缓冲流中写入数据qint64 write(char*data,qint64 maxSize);qint64 write(char*data);qint64 write(const QByteArray&byteArray);21.3.2 QTcpServer?定义头文件:定义头文件:QTcpServer?说明:说明:QTcpServer提供了提供了TCP协议下的服务器侦听、分配服务器协议下的服务器侦听、分配服务器Socket等功能。等功能。?主要方法:

11、主要方法:?启动服务器侦听启动服务器侦听bool listen(const QHostAddress&address=QHostAddress:Any,quint16 port=0);?关闭服务关闭服务void close();?主要方法(续):主要方法(续):?获取当前服务器是否在侦听获取当前服务器是否在侦听bool isListen()const;?获取服务器的地址和端口获取服务器的地址和端口QHostAddress serverAddress()const;quint16 serverPort()const;?等待新连接等待新连接bool waitForNewConnection(int

12、 msecs=0,bool*timeout=NULL);?是否存在等待处理的连接是否存在等待处理的连接virtual bool hasPendingConnections()const;?获取一个等待处理的连接的获取一个等待处理的连接的Socketvirtual QTcpSocket*nextPendingConnection();21.3.3 QThread?定义头文件:定义头文件:QThread?说明:说明:QThread用来实现多线程。使用时需要继承用来实现多线程。使用时需要继承QThread类,并重写类,并重写run函数。当需要启动多线程时,使用函数。当需要启动多线程时,使用start

13、函数启动线程,并开始运行函数启动线程,并开始运行run函数函数?主要方法:主要方法:?启动线程启动线程void start();?主要方法(续):主要方法(续):?线程所要执行的代码线程所要执行的代码?virtual void run();?该函数为保护函数,不能被外界直接调用该函数为保护函数,不能被外界直接调用?线程空闲函数线程空闲函数?void exec();?当当run函数处理结束后,调用此函数,此函数会等待退出信号函数处理结束后,调用此函数,此函数会等待退出信号21.4 实例训练实例训练?本次实例需要完成一个简单的本次实例需要完成一个简单的P2P网络聊天软件网络聊天软件?P2P网络聊天

14、软件可以不使用服务器,将两个聊天软件所在的主机直接互联即可通信网络聊天软件可以不使用服务器,将两个聊天软件所在的主机直接互联即可通信?通信前需要知道对方的通信前需要知道对方的IP地址地址21.4.1 QT 4.5的安装的安装?http:/ 建立工程建立工程?Qt4 Gui Application?输入工程基本信息输入工程基本信息?选择开发模块选择开发模块?添加网络模块添加网络模块21.4.3 数据结构设计数据结构设计?添加类添加类?添加成功添加成功?class SocketThread:public QThread?private:?QTcpServer*server;?QTcpSocket*

15、socket;?QObject*parent;?bool connectout;?public:?SocketThread(QObject*p);?SocketThread();?void run();?bool Connect(const QHostAddress&addr);?bool Send(const QString&str);?;21.4.4 界面设计界面设计21.4.5 动作设计动作设计?修改修改MainWindow类类class MainWindow:public QMainWindowQ_OBJECTpublic:MainWindow(QWidget*parent=0);Ma

16、inWindow();void AppendReceive(const QString&str);void SetPeerAddr(const QHostAddress&addr);private:Ui:MainWindowClass*ui;SocketThread*sockthrd;?Go To Slot/“Send”按钮被单击后的操作按钮被单击后的操作void MainWindow:on_pbSend_clicked()/发送用户输入的数据发送用户输入的数据if(sockthrd-Send(ui-leSend-text()/如果发送成功,则在窗口上进行相应的显示如果发送成功,则在窗口上进行

17、相应的显示ui-teReceive-append(Local:);ui-teReceive-append(ui-leSend-text();ui-teReceive-append();ui-leSend-clear();/“Listen”按钮被单击后的操作按钮被单击后的操作void MainWindow:on_pbListen_clicked()/启动服务线程,侦听网络连接启动服务线程,侦听网络连接sockthrd-start();21.4.6 编译与运行编译与运行?编译编译?运行运行?运行运行思考与练习思考与练习?1查阅关于查阅关于HTTP协议的相关资料,理解协议的相关资料,理解CS开发模式

18、和开发模式和BS开发模式的不同之处。开发模式的不同之处。?2改善该改善该P2P聊天软件,比如可以继续加深实现三人以及多人聊天、文件传输、主动发现网络中正在使用该软件的用户等等功能。聊天软件,比如可以继续加深实现三人以及多人聊天、文件传输、主动发现网络中正在使用该软件的用户等等功能。思考与联系思考与联系?3选作:制作一款选作:制作一款CS模式的远程控制平台。这是一种比较有用的程序,当你上班的时候,在家中的电脑工作状态如何,比如你家的孩子是否正在浏览不良网页,你下载的电影是否已经下载完成,你可能需要远程关闭你的计算机,你还可能在你家里的电脑上留一个字条模式的远程控制平台。这是一种比较有用的程序,当你上班的时候,在家中的电脑工作状态如何,比如你家的孩子是否正在浏览不良网页,你下载的电影是否已经下载完成,你可能需要远程关闭你的计算机,你还可能在你家里的电脑上留一个字条“嗨,达令,今天晚上公司需要加班,我可能会晚点回来嗨,达令,今天晚上公司需要加班,我可能会晚点回来”等等。你可以制作一个控制平台,通过简单的按钮和操作界面实现对你家中电脑的一些有用的控制。等等。你可以制作一个控制平台,通过简单的按钮和操作界面实现对你家中电脑的一些有用的控制。

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

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com