文章目录

  • 前言
  • Socket函数
  • connect函数
  • bind函数
  • listen函数
  • accept函数
  • 为什么要有监听描述符和已连接描述符,他们间的区别是什么

大家好,我是Song同学,时间过得很快,我觉得人生还是得有自己的追求,我也不希望自己的大学四年和今后的生活是在玩乐中度过,希望自己每天都有收获,在CSDN上记录下自己的学习过程,主要是更新算法、QT、C++以及Linux相关的内容,希望自己能够早日成为C/C++ 高级程序员,也希望大家能够通过我的分享有所收获,共同进步!


前言

从Linux内核的角度来看,一个套接字就是通信的一个端点,从Linux程序来说,套接字就是一个有相应文件描述符的打开文件,在Linux中一切皆文件,网络也可以看作是文件,通过建立描述符来进行网络通信。
要记住客户端和服务器是进程,而不是我们常提到的主机和机器

Socket函数

客户端和服务器端使用socket函数来创建一个套接字描述符

#include <sys/types.h>
#include <sys/socket.h>int socket(int domain,int type,int protocol);//成功返回描述符,出错则返回-1

client_fd=socket(AF_INET,SOCK_STREAM,0);

  • AF_INET表明我们正在使用32位IP地址(ipv4)
  • SOCK_STREAM表示这个套接字是连接的一个端点

以后介绍利用getaddrinfo函数来自动生成这些参数,更加方便,现在写最基础的


connect函数

客户端通过调用connect函数来建立和服务器的1连接

#include <sys/socket.h>int connect(int clientfd,const struct sockaddr *addr,socklen_t addrlen);//成功返回0,出错返回-1

connect函数试图与套接字地址为addr的服务器建立-一个因特网连接,其中addrlen是sizeof (sockaddr_ in)。 connect 函数会阻塞,一直 到连接成功建立或是发生错误。如果成功,clientfd描述符现在就准备好可以读写了,并且得到的连接是由套接字对
(x:y, addr.sin _addr: addr.sin. port)
刻画的,其中x表示客户端的IP地址,而y表示临时端口,它唯一地确定了客户端主机上的客户端进程。 对于socket, 最好的方法是用getaddrinfo 来为connect 提供参数


以下的接口都是为服务器利用,用来和客户端建立连接

bind函数

#include <sys/socket.h>int bind(int serverfd, const struct sockaddr *addr,socklen_t addrlen);

bind函数是把地址和服务器的套接字描述符进行绑定,让客户端可以通过地址找到相对应得服务器,地址包括IP地址还有端口号,同样的还是可以用getaddrinfo来为bind提供参数,但还是先不写

一篇文章带你理解套接字Socket的各个接口相关推荐

  1. 一篇文章带你理解爬虫究竟是什么?

    目录 前言 爬虫的应用场景 爬虫的技术选型 简单的爬虫 脑洞大开的爬虫解决思路 复杂的爬虫设计 音视频爬虫实战 一.先从几个方面来简单介绍我们音视频爬虫项目的体系 二.分步来讲下细节 三.遇到的问题和 ...

  2. spring框架_一篇文章带你理解Spring框架

    虽然现在流行用SpringBoot了,很多配置已经简化和封装了,但是对于Spring的一些基础我们了解一些是对我们自己的架构思想很有帮助的!接下来和笔者一起来探讨一下Spring框架吧! 1.什么是S ...

  3. 一篇文章带你理解并掌握Java的异常

    文章目录 前言 一.异常处理 二.异常类型 三.异常处理的其它方面 1.声明异常 2.抛出异常 3.捕获异常 4.示例学习:声明.抛出和捕获异常 四.finally子句 五.何时使用异常 六.重新抛出 ...

  4. 一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图)值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话:"八小时内谋生活,八小时外谋发展. ...

  5. 一篇文章带你领悟 Frida 的精髓(基于安卓8.1)

    转载(一篇文章带你领悟Frida的精髓(基于安卓8.1)):https://www.freebuf.com/articles/system/190565.html <Frida操作手册>: ...

  6. 一篇文章带你详解 HTTP 协议

    一篇文章带你详解 HTTP 协议 本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP 通信传输流 利用 ...

  7. 简书大佬的笔记:一篇文章带你详解 HTTP 协议(网络协议篇一)

    一篇文章带你详解 HTTP 协议(网络协议篇一) 本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP ...

  8. osgb转json_超实用:一篇文章带你了解市面上主流通用的3D模型格式

    原标题:超实用:一篇文章带你了解市面上主流通用的3D模型格式 3D模型格式知多少 说到格式,相信大家都不陌生. 随着互联网的普及,我们几乎每天都会和不同的格式打交道,文本的TXT.图片的JPG.视频的 ...

  9. 一篇文章带你详解 TCP/IP 协议(下)

    前面的第一二三章已在上篇讲解,还没看过的可以先看看:一篇文章带你详解 TCP/IP 协议(上) 本文继续讲解第四章. 四.网络层中的 IP 协议 IP(IPv4.IPv6)相当于 OSI 参考模型中的 ...

最新文章

  1. 关闭tomact被占用的进程
  2. 经常使用的时间同步server地址
  3. 怎么用爬虫筛选简历_Python爬虫面试简历
  4. 一个5节点的polardb mysql_POLARDB问题
  5. (转)CATALINA_BASE与CATALINA_HOME的区别
  6. vectorobserver obs是做什么_带着色碳纤维主体的OBS雪佛兰皮卡
  7. 纯ActionScript3.0打造的工作流程编辑器(WorkFlowEdit V1.0Bata1.0)
  8. DDoS攻击愈演愈烈,反射攻击举足轻重
  9. C++栈内存与文字常量区
  10. crosstool-ng 编译交叉工具链的常见错误及解决办法
  11. jquery是库还是框架?
  12. 用 Python 实现打飞机
  13. matlab时域分析论文,基于Matlab语言的数字信号时域相关性研究与分析.doc
  14. python 矩阵类型转换_python中的矩阵运算
  15. 千元内无敌!红米两款新机发布 小米9侧目?
  16. innodb_rollback_on_timeout
  17. 作为程序猿必须了解的生产者与消费者
  18. location.reload() 和 location.replace()的区别和应用
  19. svn拒绝访问是什么原因_为什么Windows无法访问U盘|电脑U盘被拒绝访问
  20. 使用Telnet 在DS300上配置阵列

热门文章

  1. 天气预报之三(Android版)
  2. linux手机+华为,基于Linux打造,华为重磅宣布,开始在6款手机测试新系统
  3. JWT快速上手 | 黑马
  4. PRACH过程中RA-RNTI和C-RNTI的作用
  5. 云服务器系统一键安装,云服务器一键安装系统
  6. Php一键转存微信文章,python如何导出微信公众号文章
  7. AI TIME 祝清华大学111周年生日快乐!
  8. adb按键精灵_雷电安卓模拟器修改信息及常用adb命令整理贴
  9. SpringCloud Zuul 网关
  10. Linux系统编程第六节——进程的替换(execl、exelp、execle、execv、execvp、execve)