浏览器与服务器之间创建链接的过程
--------------------------------------------------------------------------------------------------
web浏览器与服务器之间的一次完整的http请求响应过程:
1.浏览器根据所使用的http协议,解析出对应的域名
2.经过DNS域名解析,查询出对应的ip地址
3.经过url解析出对应的端口号,若是是80端口,默承认以省略
4.浏览器发起并创建到ip地址的80端口的链接 ----------------先获得域名,经过域名获得ip,再经过url获得端口 ,以后发起tcp链接
5.浏览器向服务器发起get请求--------------------------------链接以后而后再发送get请求数据
6.服务器响应浏览器的请求,浏览器读取响应,渲染网页---------------------------服务器响应请求发送数据,浏览器接受到以后解析网页
7.浏览器关闭与服务器的链接--------------数据传送完毕断开连接web
-----------------------------------------------------------------------------------------------------------
接下来对tcp链接作一些解释:套接字,是支持TCP/IP的网络通讯的基本操做单元,能够看作是不一样主机之间的进程进行双向通讯的端点,简单的说就是通讯的两方的一种约定,用套接字中的相关函数来完成通讯过程。
至关于联通网络与程序代码之间的接口
----------------------------------------------------------------------------------------------- Tcp的网络链接的过程: 首先对于服务器: 1、服务器有两个套接字:监听套接字、通讯套接字(对于某些语言来讲可能还要开启套接字服务才能建立套接字) 2、监听套接字分为:建立套接字、bind绑定ip和端口、listen监听外来链接(在bind绑定的以前还要进行链接地址的设置) 3、以后就是通讯套接字:accept创建链接 -----在qt小红能够用newconnection来表示有新的客户端链接过来了
tcpSocket=tcpServer->nextPendingConnection(); -----------经过这个函数去取得通讯套接字
4、创建链接以后就开始进行,write,read发送和读取信息 再来看看客户端的: 1、一样的建立套接字 2、发送connect链接请求(在发送connect以前还要设置要链接的服务器的地址信息)链接成功以后,qt会自动发出connected信号 3、请求成功以后再进行write、read发送和读取信息 Qt==network 在qt中有个监听 QT的槽函数,都是指针类型Lambda表达式 ---------》[=](){};=表示值传递,外部全部的局部变量,和类中的成员变量,值不能够被修改 ---------》[&](){};=表示引用传递,外部全部的局部变量,值能够被修改,引用若是被销毁,则引用会报错 ---------》通常用[=](){} QT中有一个对象树:从QObject这个根开始一直往下走,只要对象在继承的时候指定了父对象,那么当程序结束的时候 QT就会从最开始的QObject去往下逐渐的去释放资源 IP地址:一种数字化的地址方案:如:127.0.0.1 域名:一种符号化的地址方案:如:www.hstc.edn.cn DNS:在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工做称为域名解析,域名解析须要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。域名的最终指向是IP URL:统一资源定位符(英语UniformResourceLocator的缩写)俗称为网址,网址格式为:<协议>://<域名或IP>:<端口>/<路径>。<协议>://<域名或IP>是必需的,<端口>/<路径>有时可省略。如:https://www.baidu.com/ 一个网站的URL是一个网站的一部分,是网站资源的一个子集(URI的子集),是指向网站资源的统必定位符 不少状况下,URL都是在网址后面配上参数。也就是说网址一般是URL的上一级地址。如:https://blog.csdn.net/ParanoidYang/article/details/54288370 QT中的网络通讯有: 服务器: QTcpServer //监听套接字 QTcpScoket //通讯套接字 1、建立套接字后进行监听------------------ 2、当有用户链接的时候就会触发newConnection 而且返回通讯套接字,而后就开始进行readyread tcpServer=new QTcpServer(this); tcpServer->listen(QHostAddress::Any,8888); connect(tcpServer,&QTcpServer::newConnection,[=](){ tcpSocket=tcpServer->nextPendingConnection(); QString ip=tcpSocket->peerAddress().toString(); qint16 port=tcpSocket->peerPort(); QString temp=QString("[%1:%2]:成功链接").arg(ip).arg(port); ui->textEditRead->setText(temp); connect(tcpSocket,&QTcpSocket::readyRead,[=](){ QByteArray array=tcpSocket->readAll(); ui->textEditRead->append(array); }); }); 发送消息: void Widget::on_pushButton_clicked() { if(tcpSocket==nullptr) { return; } //获取编辑区的内容 QString str=ui->textEditWriter->toPlainText(); tcpSocket->write(str.toUtf8().data()); } 断开链接: void Widget::on_pushButton_2_clicked() { if(tcpSocket==nullptr) { return; } tcpSocket->disconnectFromHost(); tcpSocket->close(); tcpSocket=nullptr; } 客户端: 因为客户端是请求数据的从而一旦请求成功就会触发connected 以后也是发送信息 tcpSocket=nullptr; tcpSocket=new QTcpSocket(this); connect(tcpSocket,&QTcpSocket::connected,[=](){ ui->textEditReader->setText("服务器链接成功"); }); connect(tcpSocket,&QTcpSocket::readyRead,[=](){ QByteArray array=tcpSocket->readAll(); ui->textEditReader->setText(array); }); 发送消息: void QtSocket::on_pushButtonSend_clicked() { if(tcpSocket==nullptr) { return; } QString str=ui->textEditWriter->toPlainText(); tcpSocket->write(str.toUtf8().data()); } 断开链接: void QtSocket::on_pushButtonClose_clicked() { if(tcpSocket==nullptr) { return; } tcpSocket->disconnectFromHost(); tcpSocket->close(); tcpSocket=nullptr; } ------------------------------------------------------------------------------------------------