网络编程day1——进程间通信-socket套接字

这篇具有很好参考价值的文章主要介绍了网络编程day1——进程间通信-socket套接字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        基本特征:socket是一种接口技术,被抽象了一种文件操作,可以让同一计算机中的不同进程之间通信,也可以让不同计算机中的进程之间通信(网络通信)

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

        进程A                                                        进程B

    创建socket对象                                    创建socket对象

    准备通信地址(本地socket文件)            准备通信地址

    绑定sokect对象和地址                           ...

    监听                                                       ...                

    等待连接                                               连接

    接收\发送数据                                       发送\接收数据

    关闭socket                                            关闭socket

    删除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     数据流协议 //TCP

        SOCK_DGRAM      数据报协议 //UDP

    protocol:

        特殊通信协议,一般不用,写0即可

    返回值:成功返回socket描述符,失败返回-1  

绑定socket和通信地址

 int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

     功能:绑定socket和通信地址(文件路径\网络地址)

     sockfd:socket描述符

     addr:通信地址结构体

        实际使用传递的地址结构体 sockaddr_un或者sockaddr_in,但是传参时要把它们转换成sockaddr,因为C语言没有自建类型的自动类型识别,因此要强转 //C++有自动类型识别转换

        //本地通信使用

        #include <sys/un.h>

        struct sockaddr_un {

            __kernel_sa_family_t sun_family; // 地址簇domain写啥它写啥

            char sun_path[UNIX_PATH_MAX];   // socket文件路径 (文件路径给新的  会自动帮你创建文件)

        };

        //  网络通信时使用

        #include <netinet/in.h>

        struct sockaddr_in {

        __kernel_sa_family_t  sin_family; //地址簇domain写啥它写啥

        __be16        sin_port;   // 端口号

        struct in_addr    sin_addr;   // IP地址结构体

        };

        struct in_addr {

            __be32  s_addr;     //  IP地址数据

        };

    addrlen:地址结构体的字节数,用于区分是sockaddr_in还是sockaddr_un

    返回值:成功0 失败-1

监听绑定好的socket

 int listen(int sockfd, int backlog);

    功能:监听已经绑定好的socket

    sockfd:socket描述符

    backlog:监听等待连接的排队数量 默认最大128

    //等待连接有个排队队列  backlog是指队列满了之后还可以额外排队的数量 随便写5

    返回值:成功0 失败-1  //监听成功才能等待连接

等待连接

 int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);

    功能:等待连接

    sockfd:socket描述符

    addr:获取连接者的地址,不想获取可以给NULL   //本地连接基本不用获取

    addrlen:获取连接者的通信地址结构体字节数,不想获取可以给NULL

    返回值:成功返回一个针对该连接的新的socket描述符,失败返回-1 //接下去通信需要用这个新的socket描述符

    注意:

        1、如果没有连接,那么该函数会阻塞等待

        2、如果要获取连接者的地址,后面两个参数都需要传递

        3、addrlen要获取时,先要给addrlen传递addr的字节数,才能获取连接者的ip

连接

 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);

    功能:向建立连接之后的socket发送数据,数据流通信使用

    sockfd:建立连接之后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:buf的字节数

    flags:一般写0阻塞接收即可

        MSG_DONTWAIT 不阻塞

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

关闭socket

    close(fd)

    功能:关闭socket //一切皆文件 关闭新的那个socket 断开连接

   

    192.168.122.4   192.168.122.5   ip地址

    255.255.255.0   子网掩码

    192.168.122.0   网络地址

    192.168.122.4/24  (24个1)相当于&255.255.255.0文章来源地址https://www.toymoban.com/news/detail-685351.html

到了这里,关于网络编程day1——进程间通信-socket套接字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux网络编程:socket & fork()多进程 实现clients/server通信

    UNIX网络编程:socket实现client/server通信 随笔简单介绍了TCP Server服务单客户端的socket通信,但是并未涉及多客户端通信。 对于网络编程肯定涉及到多客户端通信和并发编程 (指在同时有大量的客户链接到同一服务器),故本随笔补充这部分知识。 而且并发并发编程涉及到多进程

    2024年02月05日
    浏览(46)
  • UNIX网络编程:socket & fork()多进程 实现clients/server通信

    UNIX网络编程:socket实现client/server通信 随笔简单介绍了TCP Server服务单客户端的socket通信,但是并未涉及多客户端通信。 对于网络编程肯定涉及到多客户端通信和并发编程 (指在同时有大量的客户链接到同一服务器),故本随笔补充这部分知识。 而且并发并发编程涉及到多进程

    2024年02月06日
    浏览(51)
  • 【网络编程】网络编程 和 Socket 套接字认识

    ✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相比本地资源来说,网络提供了更为丰富的网络资源:

    2023年04月15日
    浏览(143)
  • 「网络编程」第二讲:网络编程socket套接字(一)

    「前言」文章是关于网络编程的socket套接字方面的,下面开始讲解! 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「每篇一句」 春风得意马蹄疾,一日看尽长安花。 ——孟郊《登科后》 目录 一、预备知识 1.1 源IP和目的IP 1.

    2024年02月09日
    浏览(63)
  • 网络编程套接字(Socket)

    认识IP地址, 端口号, 网络字节序等网络编程中的基本概念; 学习socket api的基本用法; 能够实现一个简单的udp客户端/服务器; 能够实现一个简单的tcp客户端/服务器(单连接版本, 多进程版本, 多线程版本); 理解tcp服务器建立连接, 发送数据, 断开连接的流程; 通俗易懂地说,源

    2024年01月21日
    浏览(57)
  • 【网络编程】socket套接字

    如果我们的台式机或者笔记本没有IP地址就无法上网,而因为每台主机都有IP地址,所以注定了数据从一台主机传输到另一台主机 一定有源IP和目的IP 。 所以在报头中就会包含源IP和目的IP。 而我们把数据从一台主机传递到另一台主机并不是目的,真正通信的其实是应用层上的

    2024年02月02日
    浏览(66)
  • 网络编程—Socket套接字详解

    目录 一、网络编程 1.1、为什么需要网络编程? 1.2、什么是网络编程 1.3、发送端和接收端 ​编辑1.4、请求和响应 ​编辑1.5、客户端和服务端  二、Socket套接字  2.1、概念 2.2、分类  2.2.1、流套接字  2.2.2、数据报套接字  2.2.3、原始套接字  2.3、Socket编程注意事项  1.1、为什

    2024年02月16日
    浏览(54)
  • 【网络编程】网络编程概念,socket套接字,基于UDP和TCP的网络编程

    前言: 大家好,我是 良辰丫 ,今天我们一起来学习网络编程,网络编程的基本概念,认识套接字,UDP与TCP编程.💞💞💞 🧑个人主页:良辰针不戳 📖所属专栏:javaEE初阶 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。 💦期待大家三连,关注

    2023年04月20日
    浏览(61)
  • 网络编程『socket套接字 ‖ 简易UDP网络程序』

    🔭个人主页: 北 海 🛜所属专栏: Linux学习之旅、神奇的网络世界 💻操作环境: CentOS 7.6 阿里云远程服务器 在当今数字化时代,网络通信作为连接世界的桥梁,成为计算机科学领域中至关重要的一部分。理解网络编程是每一位程序员必备的技能之一,而掌握套接字编程则

    2024年02月04日
    浏览(57)
  • [JAVAee]网络编程-套接字Socket

    目录 基本概念 发送端与接收端 请求与响应 ​编辑客户端与服务器 Socket套接字  分类 数据报套接字 流套接字传输模型   UDP数据报套接字编程 DatagramSocket API DatagramPacket API InetSocketAddress API 示例一: 示例二: TCP流数据报套接字编程 ServerSocket API Socket API 示例一:   网络编程指的

    2024年02月13日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包