B19-socket初窺

來源:互聯網
上載者:User

標籤:

學前知識一、網路通訊三要素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初窺

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.