socket通訊案例:
基本特點:socket是一種接**術,被抽象成乙個檔案操作,可以讓程序之間通訊,也可以讓不同計算機的程序通訊(網路)。
函式1、int socket(int domain, int type, int protocol);
功能:建立套接字
domain:
af_unix/af_local 本地通訊,程序間通訊
af_inet 基於ipv4位址通訊
af_inet6 基於ipv6位址通訊
type:
sock_stream 資料流協議
sock_dgram 資料報協議
protocol:特殊通訊協議,一般不用,寫0即可。
返回值:成功返回套接字描述符,失敗返回-1。
2、int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:繫結socket和位址(檔案路徑或網路位址)
sockfd:socket描述符
addr:位址結構體
// 基本位址型別
struct sockaddr
// 本地位址型別 #include
struct sockaddr_un
;// 網路位址型別 #include
struct sockaddr_in
;struct in_addr
3、int listen(int sockfd, int backlog);
功能:監聽socket,資料流通訊時使用
sockfd:socket描述符
backlog:排隊數量
返回值:成功返回0,失敗返回-1。
4、int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:連線socket
sockfd:socket描述符
addr:目標位址
addrlen:位址的位元組數
返回值:成功返回0,失敗返回-1。
5、int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:等待連線
sockfd:socket描述符
addr:獲取連線者的位址
addrlen:既輸入雙輸出
既告訴accept函式當前系統位址結構體的位元組數,同時也獲取發者位址結構體的位元組數
返回值:返回乙個建議連線後的socket描述符
6、size_t recv(int sockfd, void *buf, size_t len, int flags);
功能:從socket讀取資料,資料流通訊時使用
sockfd:建立連線後的socket描述符
buf:儲存資料的緩衝區位址
len:緩衝區的位元組數
flags: 一般寫0即可
msg_oob 優先接收外帶資料
msg_dontwait 不阻塞
返回值:接收到的位元組數,-1出現錯誤,0連線斷開。
7、ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:向socket傳送資料,資料流通訊時使用
sockfd:建立連線後的socket描述符
buf:待傳送的資料首位址
len:要傳送的位元組數
flags:一般寫0即可
msg_oob 優先緊急資料
msg_dontwait 不阻塞
返回值:成功傳送的位元組數,出錯返回-1。
int close(int fd);
功能:關閉socket
tcp網路通訊程式設計模型:
計算機s ---------------------------------------- 計算機c
建立套接字 -----------------------------------建立套接字
準備通訊位址(自己的) -------------------準備通訊位址(計算機s,與c在同一區域網或s是公用ip)
繫結套接字和位址 --------------------------連線計算s
監聽 …
等待連線 …
接收/傳送資料 ------------------------------傳送/接收資料
關閉套接字 ----------------------------------關閉套接字
Linux網路程式設計 socket程式設計
套接字是在進行網路連線時最重要的部分之一!套接字socket就相當於是,乙個檔案操作符,不佔空間。但是這個套接字對應這兩個緩衝區 傳送端緩衝區和接收端緩衝區,如下圖所示。兩個套接字的連線就是通過ip和埠。1.3.1 ip轉換函式 其一,該函式比較常用,在linux幫助手冊的第11章 標頭檔案 inc...
linux網路程式設計 SOCKET
今天在工作中接觸到了tcp,專案需求是利用海思平台將獲取到的相機資料通過網路將資料傳送給上位機。利用這個機會好好學習了一下網路這方面的東西。socket 相關的結構體 struct sockaddr in 在使用過程中一般需要初始化的引數一般是sin family sin port和sin addr...
linux網路程式設計之Socket
一.socket socket可看作是使用者程序與核心網路協議的程式設計介面.socket可用於本機程序間的通訊,也可用於網路上不同主機間的程序通訊.下圖顯示的是各種網路協議的位址格式 1.struct socketaddr 通用位址結構 通過獲取某種socketaddr結構體的首位址,不需要知道具...