標籤:
學前知識一、網路通訊三要素1、IP地址(主機名稱) 1》網路中裝置的標示 2》不易記憶,可以用主機名稱 3》本地迴環地址:127.0.0.1 主機名稱:localhost2、連接埠號碼 1》用於標示進程的邏輯地址,不同進程的標示 2》有效連接埠:0~65535 3》其中0~1024由系統使用或者保留連接埠,開發中不要使用1024以下的連接埠3、傳輸協議(通訊的規則) 1》TCP 2》UDP ps:www.ip138.com網站可以用來查詢IP信心。二、常見網路通訊協定
三、網路七層協議
傳遞資訊時,由上到下再由下到上分別是封包和解包。
四、TCP和UDP1、UDP(使用者資料包通訊協定) 1》只管發送,不確認對方是否接收到 2》將資料及源和目的封裝成資料包中,不需要建立串連 3》每個資料報的大小限制在64K之內 4》因為無需串連,因此是不可靠協議 5》不需要建立串連,速度快 6》應用情境:多媒體教室/網路流媒體,用得很少2、TCP(傳輸控制通訊協定) 1》建立串連,形成傳輸資料的通道 2》在串連中進行大資料轉送(資料大小不收限制) 3》通過三向交握完成串連,是可靠協議,安全送達 4》必須建立串連,效率會稍低 五、建立串連的三向交握,中斷連線的四次握手
本文一、Socket(插座)概念 1、Socket就是為網路服務提供的一種機制 1》在Unix中,網路既是Socket,並不局限在TCP/UDP 2》Socket可以用於自訂協議 2、通訊的兩端都是Socket 3、網路通訊其實就是Socket間的通訊 4、資料在兩個Socket間通過IO傳輸 5、Socket開始時是純C語言的,是跨平台的二、Socket通訊
三、利用終端nc建立socket聊天
1 // 1. 建立 socket 2 /** 3 參數 4 5 domain: 協議域,AF_INET->IPV4 6 type: Socket 類型,SOCK_STREAM(TCP)/SOCK_DGRAM(報文 UDP) 7 protocol: IPPROTO_TCP,如果傳入0,會自動根據第個參數,選擇合適的協議 8 9 傳回值10 socket > 0 就成功11 */12 int clientSocket = socket(AF_INET, SOCK_STREAM, 0);13 14 // 2. 串連到伺服器15 /**16 參數17 1> 用戶端socket18 2> 伺服器位址結構體指標19 3> 結構體資料長度20 傳回值21 0 成功/其他 錯誤代號22 */23 struct sockaddr_in serverAddr;24 serverAddr.sin_family = AF_INET;25 // 連接埠26 serverAddr.sin_port = htons(12345); // 終端輸入 $nc -lk 12345才能串連成功(開啟本機12345連接埠,並持續監聽)27 // 地址 inet_addr 函數,可以將 ip 地址轉換成一個數字28 serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");29 // 在 C 語言開發中,經常傳遞一個資料結構的指標同時,需要指定該資料結構的長度30 int connResult = connect(clientSocket, (const struct sockaddr *)&serverAddr, sizeof(serverAddr));31 if (connResult == 0) {32 NSLog(@"串連成功");33 } else {34 NSLog(@"串連失敗-%d",connResult);35 }36 37 // 3. 發送資料給伺服器38 /**39 參數40 1> 用戶端socket41 2> 發送內容地址42 3> 發送內容長度43 4> 發送方式標誌,一般為044 傳回值45 如果成功,則返回傳送的位元組數,失敗則返回SOCKET_ERROR46 */47 NSString *sendMsg = @"are you ok?";48 ssize_t sendLength = send(clientSocket, sendMsg.UTF8String, strlen(sendMsg.UTF8String), 0);49 NSLog(@"發送了%ld個位元組",sendLength);50 51 // 4. 從伺服器接收資料52 /**53 參數54 1> socket55 2> 接收資料的緩衝區地址,需要提前準備56 3> 緩衝區長度57 4> 標記,0,阻塞式58 59 傳回值60 如果成功,則返回接收到的位元組數61 */62 uint8_t buffer[1024]; // 要把空間準備出來63 ssize_t recvLength = recv(clientSocket, buffer, sizeof(buffer), 0);64 NSLog(@"接收了%ld個位元組",recvLength);65 // 擷取伺服器返回的資料,從緩衝區中讀取 recvLen 個位元組!66 NSData *data = [NSData dataWithBytes:buffer length:recvLength];67 // 轉換成字串68 NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];69 NSLog(@"%@",str);70 71 // 5、關閉72 /**73 長串連:連上就一直聊!通常用於 QQ,即時通訊,效率高!74 短串連:通訊一次,馬上斷開,下一次再次建立串連,效率低75 */76 close(clientSocket);
1、Netcat
1》是一個終端下用於調試和檢查網路的工具包 2》可用於建立 TCP/IP 串連參考文章:http://www.oschina.net/translate/linux-netcat-command2、智能家居原理 1》手機端只是發送指令和接收回執解析。核心控制模組都在硬體裡整合,無法擴充或改變。
B19-socket初窺