LinuxC-Socket进程间通信

一、Socket进程间通信
基本特点:
socket是一种接口技术,被抽象成一个文件来操作,可以让同一台计算机进
程间通信,也可以让不同的计算机的进程通信(网络)

同一台计算机的进程间通信:
    底层需要借助socket文件,进行同一计算机

#include           /* See NOTES */
#include 
int socket(int domain, int type, int protocol);
功能:创建socket对象
domain:
    AF_UNIX, AF_LOCAL   本地通信,进程间通信
    AF_INET             基于IPv4地址通信
    AF_INET6            基于IPv6地址通信
type:
    SOCK_STREAM         数据流协议
    SOCK_DGRAM          数据报协议
protocol:
    特殊的通信协议,一般不用,写0即可
返回值:成功返回socket描述符,失败返回-1

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:绑定socket和通信地址
socket:socket描述符
addr:
    实际传递的是sockaddr_un或者sockaddr_in,但是要把它们转换成为sockaddr类型

    #include  [vim /usr/include/linux/un.h]
    struct sockaddr_un 
    {
        __kernel_sa_family_t sun_family; //创建socket时domain写什么就填什么
        char sun_path[UNIX_PATH_MAX];   //socket文件路径
    };

    网络通信地址类型:
    struct sockaddr_in 
    {
        __kernel_sa_family_t  sin_family; //创建socket时domain写什么就填什么
        __be16        sin_port;            //端口号
        struct in_addr    sin_addr;         // IP地址   
    };

    struct in_addr {
        __be32  s_addr;
    };

addrlen:结构字节数
返回值:成功返回0,失败返回-1

int listen(int sockfd, int backlog);
功能:监听socket,数据流通信时使用
sockfd:socket描述符
backlog:排队数量   
返回值:成功返回0 ,失败返回-1

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:等待连接,数据流通信时使用
sockfd:socket描述符
addr:获取连接者的地址
addrlen:既是输入也是输出
    既要告诉accept函数当前系统地址结构的字节数,同时也能够获取发送者的地址结构
    体的字节数
返回值:
    成功返回是一个建议连接后的socket描述符,失败返回-1

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:连接socket
sockfd:socket描述符
addr:目标地址
addrlen:地址结构体的字节数
返回值:成功返回0,失败返回-1

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:向连接成功的sockfd发送数据,数据流中使用
socked:连接成功后的socket描述符
buf:待发送的数据内存首地址
len:要发送的字节数
flags:一般0即可
    MSG_DONTWAIT:不阻塞
    MSG_OOB:优先发送紧急的数据
返回值:成功发送的字节数,失败返回-1

ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:从连接成功后的socket中读取数据
sockfd:连接成功后的socket描述符
buf:存储读取到的内存数据的首地址
len:存储数据的内存的字节数
flags:一般写0即可
    MSG_DONTWAIT:不阻塞
    MSG_OOB:优先接收紧急的数据
返回值:成功接收到的字节数,-1接收错误,0连接断开

** 本地socket进程间通信编程模型:
进程A 进程B
创建socket对象 创建socket对象
准备通信地址 准备通信地址
绑定socket和地址 …
监听 …
等待连接 连接
接收/发送 发送/接收
关闭socket 关闭socket
删除socket

你可能感兴趣的:(C语言,linux,udp,tcp/ip)