Socket
- Socket又稱“套接字”
- 網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為socket
- 應(yīng)用程序通常通過“套接字”向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求
網(wǎng)絡(luò)通信的要素
- 網(wǎng)絡(luò)上的請求就是通過Socket來建立連接然后互相通信
- IP地址(網(wǎng)絡(luò)上主機(jī)設(shè)備的唯一標(biāo)識)
- 端口號(定位程序)
- 用于標(biāo)示進(jìn)程的邏輯地址澎剥,不通進(jìn)程的標(biāo)示
- 有效端口:065535,其中01024是由系統(tǒng)使用或者保留端口,開發(fā)中建議使用1024以上的端口
- 傳輸協(xié)議(用什么樣的方式進(jìn)行交互)
- 通訊的規(guī)則
- 常見協(xié)議:TCP喉童、UDP
TCP&UDP
TCP(Transmission Control Protocol甜刻,傳輸控制協(xié)議)
- 建立連接,形成傳輸數(shù)據(jù)的通道
- 在連接中進(jìn)行大數(shù)據(jù)傳輸(數(shù)據(jù)大小不做限制)
- 通過三次握手完成連接礁芦,是可靠協(xié)議蜻韭,安全送達(dá)
- 必須建立連接,效率會稍低
對于TCP三次握手可以理解為打電話柿扣,撥電話(第一次握手)肖方,對方接電話(掛斷導(dǎo)致第二次握手失敗)未状,互相問候(如果單方面俯画,認(rèn)為第三次握手失敗)司草。
UDP (User Data Protocol,用戶數(shù)據(jù)報協(xié)議)
- 將數(shù)據(jù)及源和目的的封裝成數(shù)據(jù)包中艰垂,不需要建立連接
- 每個數(shù)據(jù)報的大小限制在64k之內(nèi)
- 因為無需連接,因此是不可靠協(xié)議
- 不需要建立連接翻伺,速度快
對于UDP可以理解為發(fā)短信材泄,不需要知道對方開機(jī)、還是關(guān)機(jī)吨岭、還是停機(jī)拉宗;如果短信次數(shù)超過70條直接掛機(jī),無法知道短信什么時候到達(dá)。
Socket通信流程
實現(xiàn)Socket服務(wù)端接聽
實現(xiàn)socket的監(jiān)聽方法
- 使用C語言實現(xiàn)
- 使用CocoaAsyncSocket第三方框架旦事,內(nèi)部是對C的封裝
Telnet命令telnet host port/telnet 192.168.10.10 5288
- telnel命令是監(jiān)聽服務(wù)器上否個端口對應(yīng)的服務(wù)有沒有開啟
Socket 層上的協(xié)議
- Socket層上的協(xié)議指的數(shù)據(jù)傳輸?shù)母袷?/li>
- HTTP協(xié)議(HyperText Transfer Protocol)魁巩,超文本傳輸協(xié)議)
傳輸格式,假設(shè):這是建設(shè)姐浮,實際http的格式不是這樣的谷遂。http1.1,content-type:multipart/form-data,content-lenth:188,body:username=zhangsan&password=123456 - XMPP協(xié)議,是一款即時通訊協(xié)議(Extensible Messaging and Presence Protocol卖鲤,可擴(kuò)展消息處理現(xiàn)場協(xié)議)
是基于XML(Extensible Markup Language肾扰,可擴(kuò)展標(biāo)示語言)的協(xié)議,它用于IM(Instant Messaging蛋逾,即時通訊)以及在線現(xiàn)場探測集晚。這個洗衣可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時消息