一、概述
sock_stream是一種流式套接字,我們可以把它理解成一個網絡連接的雙方之間建立的通道。在網絡編程中,通過sock_stream可以進行雙向通信,即同時進行發送和接收消息。
sock_stream套接字是基於TCP協議實現的,它提供了面向連接、可靠的數據傳輸服務。在數據傳輸過程中,數據會被分成多個數據段,這些數據段會通過網絡按順序傳輸到接收端進行組裝,從而保證數據傳輸的可靠性。
二、創建sock_stream套接字
在使用sock_stream套接字之前,我們需要先創建一個套接字,下面是一個創建sock_stream套接字的示例代碼:
#include #include #include int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
上面的代碼中,socket函數可以創建一個套接字並返回一個套接字描述符。第一個參數AF_INET代表使用IPv4協議,第二個參數SOCK_STREAM代表創建一個sock_stream套接字,第三個參數0代表使用默認的協議。
三、連接遠程主機
在創建sock_stream套接字後,我們需要連接到遠程主機才能進行通信,下面是一個連接遠程主機的示例代碼:
#include #include #include const char* ip = "127.0.0.1"; int port = 8080; struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(ip); addr.sin_port = htons(port); connect(sock_fd, (struct sockaddr*)&addr, sizeof(addr));
上面的代碼中,我們首先定義了要連接的遠程主機的IP地址和端口號,然後我們通過inet_addr函數將IP地址轉換成網絡位元組序的二進制數值,再通過htons函數將端口號轉換成網絡位元組序的二進制數值。
最後使用connect函數來連接遠程主機,第一個參數為套接字描述符,第二個參數為要連接的遠程主機的地址信息,第三個參數為地址信息的長度。
四、發送和接收數據
連接到遠程主機後,我們就可以通過sock_stream套接字進行數據的發送和接收。
下面是一個發送和接收數據的示例代碼:
char send_buf[1024] = "hello"; char recv_buf[1024] = {0}; send(sock_fd, send_buf, sizeof(send_buf), 0); recv(sock_fd, recv_buf, sizeof(recv_buf), 0);
上面的代碼中,我們首先定義了一個發送緩衝區和一個接收緩衝區。使用send函數向遠程主機發送數據,第一個參數為套接字描述符,第二個參數為發送緩衝區的指針,第三個參數為發送緩衝區的大小,第四個參數為0表示使用默認的發送方式。
使用recv函數從遠程主機接收數據,第一個參數為套接字描述符,第二個參數為接收緩衝區的指針,第三個參數為接收緩衝區的大小,第四個參數為0表示使用默認的接收方式。
五、關閉sock_stream套接字
在sock_stream套接字使用完畢後,我們需要關閉套接字以釋放資源。
下面是一個關閉sock_stream套接字的示例代碼:
#include close(sock_fd);
上面的代碼中,我們使用close函數關閉sock_stream套接字,參數為套接字描述符。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/291039.html