iOS 开发基础(6)--网络通信

iOS 开发基础(6)--网络通信,第1张

OSI 的七层协议体系结构的概念清晰,理论完整,当时它既复杂又不实用TCP/IP 体系结构则不同,但是它现在却得到了非常广泛的应用,不过从实质上讲, TCP/IP 只是最上面的三层,因为最下面的网络接口层并没有什么具体内容因此在学习计算机网络的时候往往采取折中的方法,即综合 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构

iOS 开发中的网络通信主要是在传输层和应用层进行一些网络 IP 地址,端口以及协议的一些处理首先是网络层的两种传输协议 UDP 和 TCP 的含义以及区别:

用户数据包协议UDP 在传输数据之前不需要先建立连接.远地主机的运输层在收到 UDP 报文后,不需要给出任何确认

主要特点:

传输控制协议TCP 提供面向连接的服务在传输数据之前必须先建立连接,数据传输完成后要释放连接建立连接需要通过三次握手,而释放连接需要四次握手

主要特点:

第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

这个问题的本质就是信道不可靠,但是通信双方需要中间传输的数据是可靠的,而要解决这个问题,无论你是在信息中包含什么信息,三次通信是理论上的最小值,所以三次握手不是TCP本身的要求,而是为了满足在不可靠信道上可靠的传输信息这一需求所致的;这里的本质需求就是,信道不可靠,数据传输要可靠,三次握手之后你先继续握手还是发数据也好,跟进行可靠信息传输的需求就没关系了,因此如果信道可靠,无论什么时候发出消息,对方一定能收到,或者你不关心是否要保证对方收到你的消息,那就能像UDP那样直接发送消息就可以;

1.当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据接口(当然确认信号还是可以发),就会发FIN给主机B;

2.主机B收到A发送的FIN,表示收到了,就会发送ACK回复;

3.但是这时B可能还在发送数据,没有想要关闭数据口的意思,所以FIN和ACK不是同时发送的,而是等到B数据发送完,才会发送FIN给主机A;

4.A收到B发来的FIN,知道B的数据也发送完了,回复ACK,A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接;

在客户端发送最后的ACK回复,但是该ACK可能丢失。服务端如果没有收到ACK,将不断重复发送FIN片段。所以客户端不能立即关闭,它必须确认服务端接收到了该ACK,客户端会在发送出ACK之后进入到TIME_WAIT状态,客户端会设置一个计时器,等待2MSL的时间,如果在该时间内再次收到FIN,那么客户端会重发ACK并再次等待2MSL;所谓2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果知道2MSL,客户端都没有再次收到FIN,那么客户端推断ACK已经成功接收,则结束TCP连接;

HTTP是一种无状态的连接,客户端每次读取web网页时,服务器都会认为这是一次新的会话。但有时候我们需要持久保存一些用户信息,比如登录时的用户名和密码等;而这些信息都是需要Cookie和Session来保存;

这两个的本质区别就是Cookie是保存在客户端的,而Session是保存在服务器上的;

当服务器接收到 cookie 后,会根据 cookie 中的 SessionID 来找到这个客户的 session。如果没有,则会生成一个新的 SessionID 发送给客户端。

HTTP 连接使用的是"请求--响应"的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据一次请求后立即断开HTTP 使用的的面向连接的 TCP 作为传输层协议,保证了数据的可靠性但是 HTTP属于无状态,无连接虽然使用了 TCP 连接,但通信的双方不需要先建立连接

socket 连接通常情况下就是 TCP 连接,因此 socket 连接一旦建立,通信双方即可开始互相发送数据内容,直到双方的连接断开但在实际应用中,客户端和服务器之间的通行防火墙会关闭长时间处于非活跃状态的连接而导致 socket 连接中断,因此需要通过轮询告诉网络该连接处于活跃状态

连接过程分为三个步骤:服务器监听,客户端请求,连接确认

服务器监听 :服务器端套接字并不定位具体的客户端套接字,而是处于等待连接状态,实时监测网络状态,等待客户端的连接请求

客户端的连接请求 :指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字,为此客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端的套接字的地址和端口号,然后就向服务器端套接字提出连接请求

连接确认 :当服务器端套接字监听到或者说收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接,而服务器端的套接字继续处于监听状态,继续接受其它客户端套接字的连接请求

HTTP的 URL 的一般形式是: http://<主机>:<端口>/<路径>

HTTP 的默认端口号是:80

HTTP 有两类报文:

1.请求报文---从客户端向服务器发送的请求报文

2.响应报文---从服务器到客户的回答

特点:所有的请求参数都拼接都 URL 的后面

缺点:

特点:

1xx 保留.响应保留

2xx 请求成功接收

3xx 为完成请求客户端需要进一步细化请求

4xx 客户端请求错误(参数,方式不正确)

5xx 服务器端有错误

一、准备

一台安装了OS X操作系统的电脑(笔记本或一体机)

电脑上安装了Xcode

能连接到互联网——我们需要从网络上下载一些资源

了解基本的PHP代码基础和Mysql执行语句

二、基本步骤

配置PHP Apache环境

下载并安装MySql

下载并使用phpMyAdmin

三、详细操作

1.配置PHP Apache环境

Mac OS上自带PHP Apache环境,所以不需要另外下载安装包,只需要简单配置一下即可。

(1)由于Apache目录是隐藏目录,如果系统目前不显示隐藏文件和文件夹,我们可以通过在Finder窗口下使用Command+Shift+G组合快捷键,或者在Finder状态下点击顶部状态栏的“前往——>前往文件夹”,在打开的对话框中输入

/etc/apache2

进入apache2目录,然后使用文本编辑器打开名为“httpd.conf”的文件,如图1所示。

图1

(2)“httpd.conf”的文件中查询到如下代码:

#LoadModule php5_module libexec/apache2/libphp5.so

将该代码前面的#号删除,从而在Apache中启用PHP5模块。然后保存文件。

在保存文件时,如果提示没有修改该文件的系统权限时,右键点击该文件,选择“显示简介”,然后点击最右下角的小锁图标,将Privilege修改为Read&Write即可。同时我们还需要修改apache2这个文件夹的权限。

(3)接下来,打开“系统偏好设置”,选择“共享”选项卡,在打开的对话框中确保“互联网共享”未处于勾选状态(笔者的系统是10.12.3版本),如图2所示。

图2

(4)最后,在终端输入如下指令重启apache:

sudo apachectl restart

此时,在浏览器输入

http://localhost/

并回车,如果出现如图3所示的结果,说明PHP环境配置成功。

图3

2.下载并安装MySql

(1)进入MySQL官网下载页面,在“Select Operating System:”下拉列表中选择Mac OS X之后,在给出的下载列表中选择DMG格式的文件进行下载。

(2)下载完成后打开,可以看到如图4所示的文件。先点击安装文件"mysql-5.7.18-macos10.12-x86_64.dmg"。

图4

(3)安装完成后,MySQL会给出一个默认密码,保存一下这个密码,下面会用到。选择“系统偏好设置”,搜索到“MySQL”,点击打开,然后开启MsSQL,并勾选“开机自启动”选项,如图5所示。

图5

(4)打开终端,输入如下指令:

mysql -version

若提示“-bash: mysql: command not found”,就需要先配置mysql bin目录的环境变量。

首先,在Finder状态下,点击屏幕上方导航栏“前往——>前往文件夹”,在弹出来的对话框中输入“/etc/bashrc”,点击确定。

然后,使用文本编辑打开“bashrc”文件(仍然别忘了修改这个文件的读写权限),在末尾加入如下代码:

#mysqlalias mysql='/usr/local/mysql/bin/mysql'alias mysqladmin='/usr/local/mysql/bin/mysqladmin'

然后,我们要修改MySQL给出的默认密码。打开终端,输入如下指令并回车:

mysqladmin -u root -p password

然后终端提示“Enter password:”在此输入刚才安装完MySQL之后分配的默认密码,然后回车,提示“New password:”,在此输入新的密码并回车,在“Confirm new password: ”后再次输入新密码并回车,则密码就重置完成了。

(5)如果使用终端来进行MySQL操作,无疑是一件很痛苦的事情。所以一般我们使用phpMyAdmin来进行数据库的操作。前往phpAdmin下载页面根据自己的需要下载phpAdmin(我下载的是phpMyAdmin-4.7.0-all-languages.zip)。下载完成后,解压缩,并将解压缩之后的文件夹改名为phpMyadmin。然后将该文件夹复制到“/Library/WebServer/Documents/”目录下。

(6)进入phpMyadmin文件夹,复制一个名为“config.sample.inc.php”的文件,粘贴到当前目录下,并改名为“config.inc.php”。

(7)使用文本编辑器打开“config.inc.php”,将

$cfg['Servers'][$i]['host'] = 'localhost'

修改为:

$cfg['Servers'][$i]['host'] = '127.0.0.1'

保存后,在浏览器输入

http://localhost/phpmyadmin/

  进入phpAdmin登入界面,用户名输入为root,密码为在第(4)步设置的新密码。进入后能正常使用phpAdmin来操作MySQL。

作者:三创iOS和PHP开发

链接:https://www.jianshu.com/p/c3f53ed7e184

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

具体部署

1)远程登录:

第一次购买小鸟云后,会把该小鸟云服务器的root账号、密码发送购买者的邮箱,然后购买者可以通过远程登录到小鸟云服务器

2)安装web环境

根据自己应用特点选择安装相关web服务器tomcat或者jetty,小鸟云提供了一条龙安装部署脚本,为开发者提供了更多的方便

3)打包应用

将web源码下载到本地,使用命令mvnpackage打成war包。如果不是maven工程,可以用类似ant打成war包。

4)上传war包

Linux下面可以使用sftp上传war包,上传war包到指定目录后进行解压

5)启动web服务

将tomcat或jetty服务启动

6)配置反向代理、绑定域名

具体信息参考:http://www.niaoyun.com


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/505125.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-17
下一篇2023-06-17

发表评论

登录后才能评论

评论列表(0条)

    保存