文章目錄
01 網絡通信解決什麼問題?
爲了解決不同主機進程間通信的問題
用的socket套接字,用來解決不同主機進程間通信問題
socket在不同的主機必須成對出現
每一臺主機必須要有和對方主機成對出現的socket
02 socket
#include<sys/socket.h>
int sockert(int domain,int type,int protocol);
功能:創建一個socket套接字
參數:
domain:AF_INET
type:
SOCK_STREAM:流式套接字,用於TCP 通信
SOCK_DGRAM:報式套接字,用於UDP通信
protocol:協議0 自動指定
返回值:返回一個套接字(文件描述符)
03 bind
#include<sys/socket.h>
int bind(int sockfd,const struct sockaddr*addr,socklen_t addrlen);
功能:
給套接字綁定一個固定的IP和端口
參數:
sockfd:套接字
addr: iPV4套接字結構體地址 轉成 通用套接字結構體地址
addrlen:結構體的大小
04 網絡通信 需要解決三大問題: 協議 ip port
協議 ip port 封裝在一個結構體中
01 IPV4套接字結構體:
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
02 通用套接字結構體:
struct sockaddr*
struct sockaddr{
sa_family_t sa_family; //2字節
char sa_data[14] ; //14字節
}
05 sendto 等同於write
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
功能: 發送數據
sockfd:套接字;
buf: 發送的內容地址
len: 發送內容的大小
flag: 通常設置爲0;
dest_addr: ipv4套接字結構體(目的地的地址信息)
addrlen: 結構體大小
06 recvfrom 等同於read
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
功能: 收數據
sockfd: 套接字
buf: 存儲數據數據區的地址
len: 存儲數據數據區的大小
flag: 0
src_addr: ipv4套接字結構體(存儲對方的地址信息)
addrlen: ipv4結構體大小的地址
返回值:接收數據的字節數