linux環境下SOCKET網路程式設計

2021-08-05 21:04:25 字數 2876 閱讀 1775

前言

socket是對tcp/ip的封裝與應用。

在同乙個網際網路上,通過ip位址和埠號與協議,二台主機則可以互相鎖定特定的程序。

socket 是一種特殊的檔案。使我們不必了解tcp/ip等協議即可完成對話。

對他的操作也和普通檔案類似「open----write/read----close"。

1:建立乙個socket

#include #include int socket(int domain, int type, int protocol);

socket函式相當於open或者是creat函式

domain為協議域                常用的協議域為af_inet(ipv4)、af_inet6(ipv6)

type為socket檔案的型別    常用的檔案型別為sock_stream: 提供面向連線的穩定資料傳輸,即tcp協議。

protocol為協議                   通常填0,系統自動根據type來配對 。

他的返回值是socket檔案的描述字,用int型的變數來接取;

2:賦予socket位址

在網際網路中,而機互動可以看成二個socket在對話。他們彼此之間靠ip+協議+埠來確認彼此。 

我把ip+協議+埠可以看作socket的位址

#include #include int   bind(int   sockfd,  const  struct  sockaddr  *my_addr,  socklen_taddrlen);
bind用來給socket繫結位址

sockfd為socket的描述字;

struct sockaddr *my_addr為一類結構體,裡面存放著socket的位址,根據socket協議域不同而選擇不同位址結構體

socklen_taddren為結構體位址的大小sizeof(my_addr)

ipv4的位址結構體

struct sockaddr_in ;

struct in_addr

ipv6的結構體
struct sockaddr_in6 ;

struct in6_addr ;

3:監聽socket

當我們建立了乙個socket並給他繫結位址後,便需要實時來監聽是否有其他socket想與其通話

#include int listen(int sockfd, int backlog);
sockfd為需要監聽socket的描述字

backlog是允許排隊的數量

4:向其他socket發起鏈結

當本機socket想與其他socket進行通話,便需要傳送請求

#include #include int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
sockfd為本機socket的描述字

struct sockaddr *sery_addr為目標socket的位址

addrlen為目標socket位址的長度

connect為給sockfd分配乙個ip和埠;

5:接受其他socket發起的鏈結

當其他socket向本機socket傳送請求時,我們接受後便可以通話

#include #include int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
sockfd為本機socket的描述字

sockaddr *addr為接受其他socket的位址,如果是接受任意乙個可以設為null

addrlen為addr大小,任意可以設為null

他的返回值是請求通話的socket描述字.

6:接受其他socket發來的資料

當二個socket建立起通話時,二者之間可以進行資料交換,可以利用read、recv等函式讀取另一端發來的資料

#include #include ssize_t recv(int s, void *buf, size_t len, int flags);
s為accept接受的socket的返回值

buf為指定的一塊空間存放發來的資訊

len為指明該空間的大小

flag一般為0;有興趣用man自己檢視

返回值為接受到的資料

7:向其他socket傳送資料

當二個socket建立起通話,二者之間可以進行資料交換,可以利用write、send等函式向另一端傳送資料

#include #include ssize_t send(int s, const void *buf, size_t len, int flags);
s為傳送端的socket描述字

bud為傳送資料存放的空間

flags為傳送資料的大小

8:關閉通話

當我們傳送或接受完指定的資料後,便可以進行關閉通話

#include int close(int fd);
fd為socket描述字

linux下socket程式設計

一 什麼是socket socket可以看成是使用者程序與核心網路協議棧的程式設計介面。socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。socket api是一層抽象的網路程式設計介面,適用於各種底層網路協議,如ipv4 ipv6。struct sockaddr in...

linux下socket程式設計

作為乙個嵌入式開發者,在實際的研發專案中,常常需要編寫socket網路程式設計介面,提供給軟體開發人員。下面將提供乙個常用的 模板 客戶端的功能可以用微控制器多功能除錯助手進行驗證 include include include include include include include def...

linux下socket程式設計

簡單的linux下socket程式設計,分別基於tcp和udp協議實現的簡單程式 linux下socket程式設計可以概括為以下幾個函式的運用 流程 將套接字繫結到伺服器的網路位址上 if bind server sockfd,struct sockaddr my addr,sizeof struc...