說說Socket的那些事兒 上

2021-07-29 19:11:29 字數 2512 閱讀 9277

兩個計算機通訊的過程,就像兩個人打**一樣

socket  套接字

socket又稱"套接字",應用程式通常通過"套接字"向網路發出請求或者應答網路請求。

為網路服務提供一種機制

網路通訊其實就是socket之間的通訊

資料在兩個socket之間通過io傳輸

socket是純c語言的,是跨平台的

http基於socket

底層使用的是tcp協議

socket的通訊過程

建立socket

連線到伺服器

傳送資料給伺服器

從伺服器接收資料

關閉連線

重點:"理解"什麼是socket.

nc -lk 埠號 :始終監聽本地計算機此埠的資料. 

匯入三個標頭檔案

socket

書寫步驟

/**/

建立客戶端 socket.

int socketnumber = socket(af_inet,sock_stream,0);

if (socketnumber > 0) else;

連線到伺服器/*

連線到伺服器.

三個引數:     

1.客戶端socket.

2.接收方的socket引數.

3.資料長度.     

返回值: 0 表示成功,其他: 錯誤代號.*/

//1.伺服器socket

struct sockaddr_in serveraddress;

// ipv4協議.

serveraddress.sin_family = af_inet;

//接收方(伺服器)ip位址.

serveraddress.sin_addr.s_addr = inet_addr("127.0.0.1");

// 埠號.

serveraddress.sin_port = htons(56789);

//serveraddress 的資料長度.

socklen_t length =sizeof(serveraddress);

// 連線伺服器.

//在c語言中,傳遞結構體的時候,會指定結構體的長度

//&取的是資料的起始位置,只有傳遞乙個資料的長度,才能夠保證拿到完整的結構體資料.

//返回值:0成功,其他都是失敗.

int connection =connect(socketnumber, (const

struct sockaddr *)&serveraddress,length);

if (!connection) else

傳送訊息到伺服器/*

傳送訊息到伺服器

引數:1> 客戶端socket.

2> 傳送內容位址.

3> 傳送內容長度.

4> 傳送方式標識,一般為0.

*///

傳送訊息內容

nsstring *msg =@"hello socket!";

msg.length :表示的是oc字串的長度.

msg.utf8string :將oc字串轉換成 utf8 的 ascii 碼,乙個漢字需要占用3個位元組的長度.

strlen :計算所有 ascii 碼的長度.

// 傳送訊息

ssize_t result = send(socketnumber, msg.utf8string,strlen(msg.utf8string),0);

nslog(@"result = %ld",result);

伺服器接收訊息/*

接收伺服器接返回的訊息

引數:1> 客戶端socket.

2> 接收內容快取區.

3> 接收內容快取區長度.

4> 接收方式.0表示阻塞式.必須等待伺服器返回資料.    

返回值:

如果成功,則返回接收到的位元組數.失敗則返回socket_error    */

//建立接收內容快取區.

uint8_t buffer[1024];

// 接受訊息

ssize_t len = recv(socketnumber, buffer,sizeof(buffer),0);

nslog(@"len: %zd",len);

//取出接受內容快取區中的資料.

nsdata *data = [nsdata datawithbytes:buffer length:len];

//將二進位製流資料data轉換成字串型別.

nsstring *receive = [[nsstring alloc] initwithdata:dataencoding:nsutf8stringencoding];

nslog(@"receive:%@",receive); 

關閉socket

close(socketnumber);

說說浮動那些事兒

什麼是浮動 css 的 float 浮動 使元素向左或向右移動,在其周圍的元素也會重新排列。float 浮動 往往是用於影象,但它在 盒子 布局時一樣非常有用。元素怎樣浮動 元素的水平方向浮動,意味著元素只能左右移動而不能上下移動 乙個浮動元素會盡量向左或向右移動,直到它的外邊緣碰到包含框或另乙個浮...

說說部落格的那些事兒

adversity leads to prosperity.窮則思變 讀書的時候,經常看別人都讀的輕輕鬆鬆的,還拿個高分,自己累死累活的,卻依然成績平平不見起色的時候,便很羨慕別人,私下裡留心別人是怎麼看書學習的,課下找他們玩,跟他們聊聊學習上的這些事兒 別人怎麼做我怎麼做,時間長了,發現比之前更累...

socket程式設計的那些事兒

1 python的socket程式設計中socket.so reuseaddr的含義 socket中so reuseaddr詳解 2 socket程式設計的time wait和close wait狀態 1 定義 tcp四次揮手時,主動發起斷開連線的一方最後會進入time wait狀態,而被動斷開連線...