當前位置:首頁 » 網頁前端 » websocketiOS
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

websocketiOS

發布時間: 2022-09-24 02:18:52

『壹』 怎樣在iOS中使用websocket協議

1、什麼是Socket? Socket又稱之為「套接字」,是系統提供的用於網路通信的方法。它的實質並不是一種協議,沒有規定計算機應當怎麼樣傳遞消息,只是給程序員提供了一個發送消息的介面,程序員使用這個介面提供的方法,發送與接收消息。 Socket描述了一個IP、埠對。它簡化了程序員的操作,知道對方的IP以及PORT就可以給對方發送消息,再由伺服器端來處理發送的這些消息。所以,Socket一定包含了通信的雙發,即客戶端(Client)與服務端(server)。 2、Socket的通信過程? 每一個應用或者說服務,都有一個埠。比如DNS的53埠,http的80埠。我們能由DNS請求到查詢信息,是因為DNS伺服器時時刻刻都在監聽53埠,當收到我們的查詢請求以後,就能夠返回我們想要的IP信息。所以,從程序設計上來講,應該包含以下步驟: 1)服務端利用Socket監聽埠; 2)客戶端發起連接; 3)服務端返回信息,建立連接,開始通信; 4)客戶端,服務端斷開連接。 3、Socket雙方如何建立起連接? 以下過程用代碼表示: Server端: 1 intport = 2000; 2 IPEndPointServerEP = new IPEndPoint(IPAddress.Any,port); 3 Socketserver = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); 4 server.Bind(ServerEP); 5 server.Listen(0); Client端: 1 intport = 2000; 2 IPAddressserverip = IPAddress.Parse("192.168.1.100"); 3 IPEndPointEP = new IPEndPoint(server,port); 4 Socketserver = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); 5 server.Bind(EP); 當伺服器端接收到來自客戶端的連接以後,需要新建一個socket來處理遠端的信息。 下面一段代碼應該在伺服器端: 1 Socketclient = server.Accept(); 以上很簡單的幾行代碼,將在以後的網路編程中經常用到,後面還會有同步通訊、非同步通訊、線程、委託與事件等等 第二部分、各協議的區別 TCP/IP SOCKET HTTP 網路七層由下往上分別為物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層。 其中物理層、數據鏈路層和網路層通常被稱作媒體層,是網路工程師所研究的對象; 傳輸層、會話層、表示層和應用層則被稱作主機層,是用戶所面向和關心的內容。 http協議 對應於應用層 tcp協議 對應於傳輸層 ip協議 對應於網路層 三者本質上沒有可比性。 何況HTTP協議是基於TCP連接的。 TCP/IP是傳輸層協議,主要解決數據如何在網路中傳輸;而HTTP是應用層協議,主要解決如何包裝數據。 我們在傳輸數據時,可以只使用傳輸層(TCP/IP),但是那樣的話,由於沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用應用 層協議,應用層協議很多,有HTTP、FTP、TELNET等等,也可以自己定義應用層協議。WEB使用HTTP作傳輸層協議,以封裝HTTP文本信息, 然後使用TCP/IP做傳輸層協議將它發送到網路上。 Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,我們才能使用TCP/IP協議。 Http和Socket連接區別 相信不少初學手機聯網開發的朋友都想知道Http與Socket連接究竟有什麼區別,希望通過自己的淺顯理解能對初學者有所幫助。 1、TCP連接 要想明白Socket連接,先要明白TCP連接。手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網路建立TCP連接。TCP協議可以對上層網路提供介面,使上層網路數據的傳輸建立在「無差別」的網路之上。 建立起一個TCP連接需要經過「三次握手」: 第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認; 第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態; 第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。 握手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主 動關閉連接之前,TCP 連接都將被一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過「四次握手」(過程就不細寫了,就是伺服器和客 戶端交互,最終確定斷開) 2、HTTP連接 HTTP協議即超文本傳送協議(HypertextTransfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。 HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。 1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。 2)在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。 由於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種「短連接」,要保持客戶端程序的在線狀態,需要不斷地向伺服器發起連接請 求。通常的做法是即時不需要獲得任何數據,客戶端也保持每隔一段固定的時間向伺服器發送一次「保持連接」的請求,伺服器在收到該請求後對客戶端進行回復, 表明知道客戶端「在線」。若伺服器長時間無法收到客戶端的請求,則認為客戶端「下線」,若客戶端長時間無法收到伺服器的回復,則認為網路已經斷開。 3、SOCKET原理 3.1套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP協議的網路通信的基本操作單元。它是網路通信過程中端點的抽象表示,包含進行網路通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議埠,遠地主機的IP地址,遠地進程的協議埠。 應用層通過傳輸層進行數據通信時,TCP會遇到同時為多個應用程序進程提供並發服務的問題。多個TCP連接或多個應用程序進程可能需要通過同一個 TCP協議埠傳輸數據。為了區別不同的應用程序進程和連接,許多計算機操作系統為應用程序與TCP/IP協議交互提供了套接字(Socket)介面。應 用層可以和傳輸層通過Socket介面,區分來自不同應用程序進程或網路連接的通信,實現數據傳輸的並發服務。 3.2 建立socket連接 建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket,另一個運行於伺服器端,稱為ServerSocket。 套接字之間的連接過程分為三個步驟:伺服器監聽,客戶端請求,連接確認。 伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。 客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連接請求。 連接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發 給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。 4、SOCKET連接與TCP連接 創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。 5、Socket連接與HTTP連接 由於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網 絡應用中,客戶端到伺服器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致 Socket 連接斷連,因此需要通過輪詢告訴網路,該連接處於活躍狀態。 而HTTP連接使用的是「請求—響應」的方式,不僅在請求時需要先建立連接,而且需要客戶端向伺服器發出請求後,伺服器端才能回復數據。 很多情況下,需要伺服器端主動向客戶端推送數據,保持客戶端與伺服器數據的實時與同步。此時若雙方建立的是Socket連接,伺服器就可以直接將數 據傳送給客戶端;若雙方建立的是HTTP連接,則伺服器需要等到客戶端發送一次請求後才能將數據傳回給客戶端,因此,客戶端定時向伺服器端發送連接請求, 不僅可以保持在線,同時也是在「詢問」伺服器是否有新的數據,如果有就將數據傳給客戶端。

『貳』 怎樣在iOS中使用websocket協議

socket發送的是流,所以必須將byte[]轉換成流的形式,之後才可以發送的。創建socket後可以通過下面的方法實現發送: PrintWriter pw = null; pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream()))); //創建一個輸入流,之後這個流的指向是socket pw.write(request.toString()); //寫入要輸入的Byte[],轉換為字元串,之後進行傳送 pw.close();//傳送完畢,關閉流

『叄』 怎樣在iOS中使用websocket協議

做一個列印指定頁的功能,輸入起始頁終止頁,然後從後台拿到對應的數據,跳到另一個頁面(此頁面承載符合條件的內容)此頁面中提供onload事件,直接執行列印哪個功能;

『肆』 如何用 Charles 抓 iOS 端 WebSocket 數據的包

你可以用推技術,把數據發送到頁面,也可以用WebSocket // 建立WebSocket連接 var strWSPath ="ws://"+wsPath; if ('WebSocket' in window){ objWebSocket = new WebSocket(strWSPath+"/mywebsocket.do"); }else if ('MozWebSocket' in window){ objWebSocket = new MozWebSocket(strWSPath+"/mywebsocket.do"); }else{ alert("對不起!你的瀏覽器不支持WebSocket!"); } // 收到消息 objWebSocket.onmessage = function(evt) { // 解析數據 var objJsonData = JSON.parse(evt.data); var strMethodName = objJsonData.method; var objData = objJsonData.data; // 執行相應的業務邏輯 window[strMethodName](objData); };