網(wǎng)絡基本


網(wǎng)絡通信的要素

  • socket
    • 通過socket來建立連接,然后通信
  • IP -- Internet Protocol
    • 網(wǎng)絡上主機設備的唯一標識
  • 端口號
    • 不同進程的標識
  • 傳輸協(xié)議
    • 通訊規(guī)則

Socket

  • 套接字
  • 網(wǎng)絡上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換觉鼻,這個連接的一端稱為一個socket湿滓。
  • 應用程序通常通過"套接字"向網(wǎng)絡發(fā)出請求或者應答網(wǎng)絡請求

傳輸協(xié)議

常用的傳輸協(xié)議有TCP和UDP

  • TCP-Transmission Control Protocol:(傳輸控制協(xié)議)

    • 建立連接芹壕,形成數(shù)據(jù)傳輸?shù)耐ǖ?/li>
    • 可以進行大數(shù)據(jù)的傳輸畏梆,傳輸數(shù)據(jù)大小不受限制
    • 通過三次握手完成連接,是可靠協(xié)議痕惋,安全的站故,但同時也是效率低
  • UDP-User Datagram Protocol:(用戶數(shù)據(jù)協(xié)議)

    • 將數(shù)據(jù)以及源和目的封裝成數(shù)據(jù)包,不需要建立連接
    • 數(shù)據(jù)包大小限制在64K之內(nèi)
    • 因為無需連接皆怕,所以是不可靠的數(shù)據(jù)傳輸協(xié)議,但是西篓,速度快

TCP/IP協(xié)議

  • TCP/IP是個協(xié)議組愈腾,可分為三個層次:網(wǎng)絡層、傳輸層和應用層岂津。
    • 在網(wǎng)絡層有IP協(xié)議虱黄、ICMP協(xié)議、ARP協(xié)議吮成、RARP協(xié)議和BOOTP協(xié)議橱乱。
    • 在傳輸層中有TCP協(xié)議與UDP協(xié)議。
    • 在應用層有:
      • TCP包括FTP粱甫、HTTP泳叠、TELNET、SMTP等協(xié)議
      • UDP包括DNS茶宵、TFTP等協(xié)議

短連接

  • 連接->傳輸數(shù)據(jù)->關閉連接
  • HTTP是無狀態(tài)的危纫,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接乌庶,但任務結(jié)束就中斷連接种蝶。
  • 短連接是指SOCKET連接后發(fā)送后接收完數(shù)據(jù)后馬上斷開連接。

長連接

  • 連接->傳輸數(shù)據(jù)->保持連接 -> 傳輸數(shù)據(jù)-> 瞒大。螃征。。 ->關閉連接透敌。
  • 長連接指建立SOCKET連接后不管是否使用都保持連接会傲,但安全性較差锅棕。

HTTP協(xié)議

  • 數(shù)據(jù)內(nèi)容 格式協(xié)議
  • 通常拙泽,由HTTP客戶端發(fā)起一個請求淌山,建立一個到服務器指定端口(默認是[80端口])的TCP連接。HTTP服務器則在那個端口監(jiān)聽客戶端發(fā)送過來的請求顾瞻。一旦收到請求泼疑,服務器(向客戶端)發(fā)回一個狀態(tài)行,比如"HTTP/1.1 200 OK"荷荤,和(響應的)消息退渗,消息的消息體可能是請求的文件、錯誤消息蕴纳、或者其它一些信息会油。
  • 為什么HTTP使用TCP協(xié)議
    • 1.保證數(shù)據(jù)的可靠
    • 2.服務器的連接是有限的,所以需要斷開連接
    • 3.一個網(wǎng)頁必須傳送很多數(shù)據(jù)古毛,而TCP協(xié)議提供傳輸控制翻翩,按順序組織數(shù)據(jù),和錯誤糾正
  • ?HTTP格式:請求頭+請求體
    • 請求頭:
      • Content-Type
      • Content-Length
      • Accept-Language
    • 請求體:請求參數(shù)

Socket 流程

Socket通信流程

代碼模擬實現(xiàn),這里使用第三方框架CocoaAsyncSocket

  • 創(chuàng)建socket對象稻薇,并監(jiān)聽
// 創(chuàng)建服務監(jiān)聽對象
ServerListener *listener = [[ServerListener alloc] init];

// 開啟監(jiān)聽
[listener start];
        
// 開啟主運行循環(huán)來保證服務不被停止
[[NSRunLoop currentRunLoop] run];
#import "ServerListener.h"
#import "GCDAsyncSocket.h"

@interface ServerListener ()<GCDAsyncSocketDelegate>
/** socket*/
@property (nonatomic, strong) GCDAsyncSocket *socket;
@end

@implementation ServerListener

-(void)start {
    // 1.創(chuàng)建socket對象
    GCDAsyncSocket *socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)];
    self.socket = socket;
    NSLog(@"%@",socket);

    // 2.綁定端口,端口號最好是1024以上
    NSError *error = nil;
    [socket acceptOnPort:5288 error:&error];
    
    if (error) {
        NSLog(@"服務開啟失敗嫂冻,有錯誤:\n%@",error);
    } else {
        NSLog(@"服務開啟成功");
    }
    
    
}

@end
  • 實現(xiàn)代理方法
#pragma mark - GCDAsyncSocket Delegate
// 有新客戶端連接時調(diào)用
-(void)socket:(GCDAsyncSocket *)serverSocket didAcceptNewSocket:(GCDAsyncSocket *)clientSocket
{
    // 保存客戶端socket,不然會斷開連接
    [self.clientSockets addObject:clientSocket];

#warning 客戶端連接成功后,監(jiān)聽數(shù)據(jù),接收和讀取數(shù)據(jù)都是使用clientSocket
    // 讀取數(shù)據(jù)
    [clientSocket readDataWithTimeout:-1 tag:0];
}

// read()--讀取客戶端的數(shù)據(jù)
-(void)socket:(GCDAsyncSocket *)clientSocket didReadData:(NSData *)data withTag:(long)tag
{
    NSLog(@"clientSocket: HOST:%@ PORT:%@",clientSocket.connectedHost,@(clientSocket.connectedPort));
    
    NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"----\n%@",dataStr);
    
    
    // 服務器響應
    NSString *sendStr = @"我(服務器)收到了!H怠桨仿!\n";
    NSData *sendData = [sendStr dataUsingEncoding:NSUTF8StringEncoding];
    [clientSocket writeData:sendData withTimeout:-1 tag:0];
    
    // 每次讀取完數(shù)據(jù)后,還得監(jiān)聽數(shù)據(jù)
    [clientSocket readDataWithTimeout:-1 tag:0];
}

// write()--數(shù)據(jù)發(fā)送成功
-(void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag {
    NSLog(@"%s",__func__);
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市案狠,隨后出現(xiàn)的幾起案子服傍,更是在濱河造成了極大的恐慌,老刑警劉巖骂铁,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吹零,死亡現(xiàn)場離奇詭異,居然都是意外死亡从铲,警方通過查閱死者的電腦和手機瘪校,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來名段,“玉大人阱扬,你說我怎么就攤上這事∩毂伲” “怎么了麻惶?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長信夫。 經(jīng)常有香客問我窃蹋,道長卡啰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任警没,我火速辦了婚禮匈辱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杀迹。我一直安慰自己亡脸,他們只是感情好,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布树酪。 她就那樣靜靜地躺著浅碾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪续语。 梳的紋絲不亂的頭發(fā)上垂谢,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音疮茄,去河邊找鬼滥朱。 笑死,一個胖子當著我的面吹牛娃豹,可吹牛的內(nèi)容都是我干的焚虱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼懂版,長吁一口氣:“原來是場噩夢啊……” “哼鹃栽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起躯畴,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤民鼓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蓬抄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丰嘉,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年嚷缭,在試婚紗的時候發(fā)現(xiàn)自己被綠了饮亏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡阅爽,死狀恐怖路幸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情付翁,我是刑警寧澤简肴,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站百侧,受9級特大地震影響砰识,放射性物質(zhì)發(fā)生泄漏能扒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一辫狼、第九天 我趴在偏房一處隱蔽的房頂上張望初斑。 院中可真熱鬧,春花似錦予借、人聲如沸越平。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晦溪,卻和暖如春瀑粥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背三圆。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工狞换, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舟肉。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓修噪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親路媚。 傳聞我的和親對象是個殘疾皇子黄琼,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)絡概念第一天 兩臺電腦怎么通過網(wǎng)絡傳輸數(shù)據(jù)?怎樣才能知道傳輸?shù)氖菙?shù)據(jù)整慎?誰摸過網(wǎng)線脏款? 看電影,怎么看的裤园?通過電流撤师,...
    小吖朱閱讀 1,560評論 0 1
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network拧揽,根據(jù)使用者...
    保川閱讀 5,956評論 1 13
  • 個人認為剃盾,Goodboy1881先生的TCP /IP 協(xié)議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評論 0 8
  • 1.這篇文章不是本人原創(chuàng)的淤袜,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的痒谴,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,068評論 6 174
  • 文/柯臨 一、 一生需要花多少時間和人打交道 人和人之間有個著名的六度空間理論:你和任何一個陌生人之間所間隔的人不...
    臨公子的后花園閱讀 4,935評論 48 117