【Linux網絡編程】07 socket\bind\IPV4套接字結構體\通用套接字結構體\sendto\recvfrom

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結構體大小的地址

返回值:接收數據的字節數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章