前言
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...