网络编程的一点知识

一、Socket进程间通信

    基本特点:

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

    同一台计算机的进程间通信:

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

        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和通信地址

        sockfd:socket描述符

        addr:

            实际传递的是sockaddr_un或者sockaddr_in 但是要把它们转换为sockaddr类型

            #include <sys/un.h> [vim /usr/include/linux/un.h]

            

            struct sockaddr_un {

                __kernel_sa_family_t sun_family; //domain写什么就填什么

                char sun_path[UNIX_PATH_MAX];   //socket文件路径

            };

            网络通信地址类型:

            #include <netinet/in.h>

            sockaddr_in {

                __kernel_sa_family_t  sin_family;   //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发送数据,数据流中使用

        sockfd:连接成功后的socket描述符

        buf:待发送的数据内存首地址

        len:要发送的字节数

        flags:一般写0即可

            MSG_DONTWAIT    不阻塞

            MSG_OOB         优先发送紧急数据

        返回值:成功发送的字节数,失败返回-1

        ssize_t recv(int sockfd, void *buf, size_t len, int flags);

        功能:从连接成功后的sockfd中读取数据,数据流中使用

        sockfd:连接成功后的socket描述符

        buf:存储读取到的数据的内存首地址

        len:存储数据的内存的字节数

        flags:一般写0即可

            MSG_DONTWAIT    不阻塞

            MSG_OOB         优先接收紧急数据

        返回值:成功接收到的字节数,-1出现错误,0连接断开

        

    本地socket进程间通信编程模型:

        进程A                       进程B

     创建socket对象                 创建socket对象

     准备通信地址                   准备通信地址

     绑定socket和地址                   ...

     监听                               ...

     等待连接                           连接

     接收/发送数据                    发送/接收数据

     关闭socket                     关闭socket

     删除socket




 




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值