1.1 網路基本概念 為什麼要學習網路編程: 在移動互聯網時代,移動應用的特征有: 移動網路應用 = + + 幾個必須掌握的基本概念: 作為 ,主要的精力都是放在前端的 開發 1.2 伺服器 按照軟體開發階段來分,伺服器可以大致分為2種 (1) 遠程伺服器 / 外網伺服器 / 正式伺服器 (2) 本 ...
本博客並非最終版本,如有更新或更正會第一時間置頂,聯繫方式詳見文末
1.1 網路基本概念
為什麼要學習網路編程:
- 網路編程是一種實時更新應用數據的常用手段
- 網路編程是開發優秀網路應用的前提和基礎
在移動互聯網時代,移動應用的特征有:
- 幾乎所有應用都需要用到網路,比如QQ、微博、網易新聞、優酷、百度地圖
- 只有通過網路跟外界進行數據交互、數據更新,應用才能保持新鮮、活力
- 如果沒有了網路,也就缺少了數據變化,無論外觀多麼華麗,終將變成一潭死水
移動網路應用 = 良好的UI
+良好的用戶體驗
+ 實時更新的數據
- 新聞:網易新聞、新浪新聞、搜狐新聞、騰訊新聞
- 視頻:優酷、百度視頻、搜狐視頻、愛奇藝視頻
- 音樂:QQ音樂、百度音樂、酷狗音樂、酷我音樂
- LBS:百度地圖、高德地圖、大眾點評、墨跡天氣、滴滴打車
- 電商:淘寶、京東商城、天貓、蘑菇街、凡客誠品、美麗說
- 社交:QQ、微信、微博、陌陌、比鄰
幾個必須掌握的基本概念:
客戶端(Client):移動應用(iOS、android等應用)
伺服器(Server):為客戶端提供服務、提供數據、提供資源的機器
請求(Request):客戶端向伺服器索取數據的一種行為
響應(Response):伺服器對客戶端的請求做出的反應,一般指返回數據給客戶端
作為
移動開發工程師
,主要的精力都是放在前端的客戶端
開發
1.2 伺服器
按照軟體開發階段來分,伺服器可以大致分為2種
(1) 遠程伺服器 / 外網伺服器 / 正式伺服器
- 使用階段:應用上線後使用的伺服器
- 使用人群:供全體用戶使用
- 速度:取決於伺服器的性能、用戶的網速
(2) 本地伺服器 / 內網伺服器 / 測試伺服器
- 使用階段:應用處於開發、測試階段使用的伺服器
- 使用人群:僅供公司內部的開發人員、測試人員使用
- 速度:由於是區域網,所以速度飛快,有助於提高開發測試效率
本地伺服器的選擇:
- 在公司開發階段,已經有專門的後端人員開發伺服器程式,不由得你選擇
- 在學習階段,選擇什麼本地伺服器都可以,能用就行
如果處於學習、開發階段,自己搭建一個本地伺服器即可
比較常見的 Java伺服器 / Apache + php 伺服器
要想在Mac上方便地啟動Java伺服器,大致有以下步驟 :
(0) 安裝JDK (Java Development Kit)
(1) 安裝Java的開發工具:eclipse 下載地址:http://www.eclipse.org/downloads 選擇64bit、Java EE版本
(2) 利用Java編寫一套伺服器程式
(3) 配置伺服器的容器:Apache Tomcat 下載地址:http://tomcat.apache.org/download-60.cgi
(4) 啟動Apache Tomcat
1.2.1 配置Apache伺服器和PHP(Mac 10.10以上)
為什麼用 “Apache":
1. 使用最廣的 Web 伺服器、IIS(微軟 Intenet Infomation Server)
2. Mac自帶,只需要修改幾個配置就可以,簡單,快捷
3. 有些特殊的伺服器功能,Apache都能很好的支持(例如:HTTP PUT/DELETE 操作,HTTPS 服務)
步驟如下:
1、在 Finder 中 /Users/用戶名 下創建一個 Sites 的文件夾,用於存放網頁等文件(不能放在桌面或文檔等個人文件夾)
2、打開【終端】
//切換工作目錄
cd /etc/apache2
3、備份文件:sudo 表示使用管理員許可權執行命令,以保護系統文件上會被破壞,使用sudo需要密碼
// cp (copy 的縮寫) httpd.conf (源文件) httpd.conf.bak (目標文件)
sudo cp httpd.conf httpd.conf.bak
//提示:如果後續操作出現錯誤!可以使用以下命令,恢復備份過的 httpd.conf 文件
sudo cp httpd.conf.bak httpd.conf
4、編輯 httpd.conf:修改配置文件中的"兩個路徑",指向剛剛創建的文件
//用vim編輯httpd.conf (vim裡面只能用鍵盤,不能用滑鼠)
sudo vim httpd.conf
//查找`DocumentRoot`
/DocumentRoot
//進入編輯模式
i
//修改`兩處`引號中的路徑
DocumentRoot "/Users/用戶名/Sites"
<Directory "/Users/用戶名/Sites">
//繼續向下,找到 Options FollowSymLinks Multiviews
//加一個單詞 `Indexes`,修改後的結果如下:
Options Indexes FollowSymLinks Multiviews
//返回命令模式
ESC
5、Mac系統預設已經安裝php,只是沒有激活,要使用php需要修改apache的配置文件
//查找php
/php
//將游標移動到首行
0
//刪除行首註釋 #
x
//保存並退出
:wq
6、拷貝php.ini文件
//切換工作目錄
cd /etc
//etc 目錄有點類似於 windows/system32,存放配置文件的目錄
sudo cp php.ini.default php.ini
//執行完後,ls 查看目錄,有php.ini和php.ini.default兩個文件
//重新啟動apache伺服器
//執行完後,看到下麵有AHXXX,表示成功 (如: AH00558)
sudo apachectl -k restart
如果提示以下錯誤是正常的:
httpd: Could not reliably determine the server's fully qualified domain name, using teacher.local for ServerName
httpd not running, trying to start
7、測試
打開瀏覽器,在地址欄輸入【127.0.0.1】,出現下圖表示成功
常見問題:
1、如果通過【127.0.0.1】點擊伺服器上的文件,出現下載,或者只是顯示一小段文字
解決辦法:在終端中輸入以下兩個命令
// 關閉 apache 伺服器
sudo apachectl -k stop
// 重新再次啟動 apache
sudo apachectl -k start
2、每次啟動電腦,Apache伺服器預設是不會自動啟動的,可以啟動電腦之後,打開終端,輸入以下命令
// 啟動 apache
sudo apachectl -k start
3、最常見的問題
交換文件已經存在,直接按字母 "d",可以刪除交換文件!
![](http://images2015.cnblogs.com/blog/731328/201604/731328-20160413131415473-1484732628.png)
4、執行腳本的時候,顯示沒有或拒絕訪問!(可能是用 NTFS 格式的 U 盤拷貝到電腦的腳本!這會把文件本身的許可權過濾掉!)以下是在終端中修改文件許可權的指令!
// 查看當前文件夾中的文件訪問許可權
ls -la
// info.php是沒有許可權的文件名
chmod 644 info.php
// *.*是更改所有文件的訪問許可權為644
chmod 644 *.*
文件的訪問許可權:分為三組,3個為一組,出現字母的表示1,-表示0
- r 只讀
- w 可寫
- x 執行
(1組)管理員許可權
(2組)當前用戶許可權
(3組)普通用戶許可權
3組字母常見組合:
110 000 000 ——> 600(管理員可讀可寫)
110 100 100 ——> 644(所有人可讀,管理員可讀可寫)
111 111 111 ——> 644(所有人可讀可寫可執行)不推薦
5、其他命令:
//查詢歷史輸入的命令
history
1.2.2 配置Tomcat伺服器和eclipse
未整理
1.2.3 配置WebDav (文件伺服器)
未整理
1.3 URL - 統一資源定位符
客戶端如何找到想要連接的伺服器:
客戶端通過URL找到想要連接的伺服器
URL : 統一資源定位符(Uniform Resource Locator):
通過1個URL,能找到互聯網上唯一的1個資源
URL就是資源的地址、位置,互聯網上的每個資源都有一個唯一的URL
URL的基本格式:協議://主機地址/路徑
(1)協議:不同的協議,代表著不同的資源查找方式、資源傳輸方式
(2)主機地址:存放資源的主機(伺服器)的IP地址(功能變數名稱)
本地伺服器的主機地址一般有3種寫法:
①127.0.0.1 :每台機器內置的IP地址,指的就是機器本身
②localhost :等價於第1種情況的127.0.0.1
③交換機、路由器分配的IP地址 :真機測試一定要用這個,且真機和伺服器得在同一個區域網
(3)路徑:資源在主機(伺服器)中的具體位置
URL中常見的協議:
(1) HTTP :超文本傳輸協議(網路開發中最常用的協議)
- 訪問的是遠程的網路資源,用於傳輸 HTML、圖像、視頻二進位數據等
- 格式是 http://
(2) file
- 訪問的是本地電腦上的資源
- 格式是 file://(不用加主機地址)
(3) mailto
- 訪問的是電子郵件地址
- 格式是 mailto:
(4) FTP
- 訪問的是共用主機的文件資源
- 格式是 ftp://
1.4 網路狀態監控
1.4.1 網路狀態監控-Reachability
在網路應用中,需要對用戶設備的網路狀態進行實時監控,目的是讓用戶瞭解自己的網路狀態,防止一些誤會(比如怪應用無能)
根據用戶的網路狀態進行智能處理,節省用戶流量,提高用戶體驗
- WIFI、3G網路:自動下載高清圖片
- 低速網路:只下載縮略圖
- 沒有網路:只顯示離線的緩存數據
Reachability的使用步驟:
(1)添加框架SystemConfiguration.framework
(2)添加源代碼
蘋果官方提供了一個叫Reachability的示常式序,便於開發者檢測網路狀態
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
(3)包含頭文件
#import "Reachability.h"
Reachability常見方法
1.主動監測監測網路狀態
// 是否WIFI
+ (BOOL)isEnableWIFI {
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
// 是否3G
+ (BOOL)isEnable3G {
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}
2.監控網路狀態
1> 監聽通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];
2> 開始監聽網路狀態
// 獲得Reachability對象
self.reachability = [Reachability reachabilityForInternetConnection];
// 開始監控網路
[self.reachability startNotifier];
3> 移除監聽
[self.reachability stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
代碼示例:
#import "Reachability.h"
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic, strong) Reachability *reachability; //監控網路
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self getNetworkStatus];
// 監聽網路狀態發生改變的通知
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(getNetworkStatus)
name:kReachabilityChangedNotification
object:nil];
// 獲得Reachability對象
self.reachability = [Reachability reachabilityForInternetConnection];
// 開始監控網路(一旦網路狀態發生改變,就會發出通知kReachabilityChangedNotification)
[self.reachability startNotifier];
}
// 獲取現在的網路狀態
- (void)getNetworkStatus {
if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus !=
NotReachable) {
NSLog(@"是wifi");
} else if ([Reachability reachabilityForInternetConnection]
.currentReachabilityStatus != NotReachable) {
NSLog(@"是手機自帶網路");
} else {
NSLog(@"網路有問題");
}
}
// 移除通知
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self.reachability stopNotifier];
self.reachability = nil;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
1.4.2 網路狀態監控-AFN框架
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1, // 未知網路
AFNetworkReachabilityStatusNotReachable = 0, // 無法聯網
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 手機自帶網路
AFNetworkReachabilityStatusReachableViaWiFi = 2, // WIFI
};
代碼示例:
#import "ViewController.h"
#import <AFNetworking.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 開始網路監控(獲得網路監控的管理者)
AFNetworkReachabilityManager *mgr =
[AFNetworkReachabilityManager sharedManager];
// 設置網路狀態改變後的處理
[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
// 當網路狀態改變了, 就會調用這個block
switch (status) {
case AFNetworkReachabilityStatusUnknown: // 未知網路
NSLog(@"未知網路");
break;
case AFNetworkReachabilityStatusNotReachable: // 沒有網路(斷網)
NSLog(@"沒有網路(斷網)");
break;
case AFNetworkReachabilityStatusReachableViaWWAN: // 手機自帶網路
NSLog(@"手機自帶網路");
break;
case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI
NSLog(@"WIFI");
break;
}
}];
// 開始監控
[mgr startMonitoring];
// 拿到當前網路狀態
// mgr.networkReachabilityStatus;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
如果你覺得本篇文章對你有所幫助,請點擊文章末尾右下角“推薦”,^_^
作者:藍田(Loto)
出處:http://www.cnblogs.com/shorfng/
如有疑問,請在下方評論區回覆 OR 發送郵件至 [email protected]聯繫我。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者���意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。