当前课程知识点:基于Linux的C++ > 第十五讲 网络编程 > 15.3 套接字(一) > LinuxCPP1503
第二部分就是套接字的编程
在这里我们首先要了解什么是套接字
第二 套接字相对应的处理函数有哪些
我们怎么调用这些函数
来实现我们进程间的通讯的模式
我们怎么使用这些函数
来编写网络程序
我们首先来看套接字的基本概念
套接字 它的通讯类型
其实有两大类
一种是连接 一种是数据报
通讯类型控制就是套接字
如何传输我们的数据
数据本身是以包的形式传输的
那么它有对应的连接类型
连接类型的话
它就会确保所有的包依序地发送
如果丢包 就会请求重传
这是第一种
第二种呢就是数据报的格式
这样的话它不保证包的到达顺序
包是有可能丢弃的 丢了
丢了就丢了 这是很典型
这是两种通讯的类型
然后套接字的属性呢
还有一个对应的名空间
你要指定这个套接字的地址格式
如果使用的是本地名空间
那么套接字
可能就是一个本地的普通的文字名
如果你是一个Internet的名空间
那么套接字实际上
就是对应着Internet的地址和端口号
明白啦 也就是说
套接字它是以一个一致的方式
处理你的本地套接字
和网络套接字的通讯的
自己的一台计算机
两个进程之间
可以使用套接字进行通讯
本机 通过Internet连接的
另外一台计算机之间
也可以使用套接字来通讯
只是对于本地的套接字来说
我们使用本地的普通文件名
来标识它
两个进程就可以互相访问了
如果这两个进程是通过Internet通讯的
那么你就只能通过Internet名空间访问它
也就是说你要标定这两台计算机
它们在因特网上的地址
整个套接字的地址
就必须以网络模式进行标识
有地址 有端口号
也就是这个意思
那么还有一个
你要确定这个套接字的通讯的协议
它确定这个数据是如何传输的
大部分情况下
我们是不关心这个协议的
因为机器会自动地
替我们选择一个
它认为最佳的协议模式
对于套接字来讲
Linux操作系统提供了一系列的管理函数
最重要的一个函数
socket()这个函数将创建一个套接字
你不把它创建出来
那其它后面都不用谈
这是我们第一个要调用的socket()函数
它将创建一个套接字
第一个参数是domain
它就对应于这个套接字的名空间
你到底是在本地名空间里
创建这个套接字呢
还是在一个Internet名空间里
创建这个套接字
就这个意思
第二个呢就是type
对应的就是它的通讯的类型
你到底是一个流模式
它是一个SOCK_STREAM
这个流的模式
还是第二种是SOCK_DGRAM
就是数据报的格式
就这两种格式
前面不已经谈过了吗 对吧
第一种格式的话
它是能够确保不会丢包的
第二种不保证的 OK
第三个就是protocol 协议
一般我们传递零
让系统替我们自动选择一个最佳的协议
就OK了
这个返回值就是那个套接字对应的
文件描述符
接下来的几个函数就是:close()
你可以关闭这个套接字释放它
然后是connect()
连接我们就会创建
两个套接字之间的连接
两个进程之间要通过套接字来通讯
那么这边要有一个套接字
那边也要有一个套接字
两个套接字之间要连接
要么怎么叫套接呢
就像两个管子把它套在一块拧紧
它两个数据不就可以流了嘛
对吧 就这个意思
这是叫连接
一个客户发起一个系统调用
试图与服务器建立一个套接字的连接
那么就要调用connect()这个函数
传了一个sockfd这样一个参数
传sock地址
传 然后是addrlen
就是那个地址的长度
就是这个东西
传这三个参数进去就行了
就可以给你构造这样的一个连接
0就表示连接成功了
-1就表示创建连接失败
在创建连接成功之后
你就可以调用send()这个函数
发送这个数据
它有几个函数都可以用
有send()、sendto()、sendmsg()
都是向套接字里面发送数据
只有在套接字处于连接状态的时候
这个send()函数才可用
bind()这个函数将绑定
服务器套接字和它的地址
你构造一个套接字
然后你要把这个套接字和这个服务器
那个地址给绑定起来
这是bind() 绑定函数
然后下一个函数
对于服务器来讲也很重要
listen() 侦听
它将侦听客户的连接
这个函数带俩参数
第一个是sockfd
第二个参数是backlog
这个里面最重要的就是第二个参数
就是backlog
就是指定有多少个挂起连接
可以进入我们的队列
我们的服务器最多能够侦听
多少个连接
同时处理多少个
就这个意思
侦听到客户连接之后
服务器就可以调用accept()这个函数
接受客户的连接
然后就会为这样一个连接
创建一个新的套接字
它就会创建一个新的套接字
和这个客户构造一个新的连接
就把它拧紧
像两个管子一样把它拧上
套接上 完事了
它们俩就可以通讯了
它的主套接字呢
还可以进一步地
继续侦听下一个客户的连接
-1.1 提纲
-1.2 程序设计的基本概念
-1.3 简单C/C++程序介绍
-1.4 程序设计的基本流程
-1.5 基本语法元素
-1.6 程序设计风格
-1.7 编程实践
-第一讲 C/C++基本语法元素--编程实践提交入口
-2.1 提纲
-2.2 结构化程序设计基础
-2.3 布尔数据
-2.4 分支结构
-2.5 break语句
-2.6 循环结构
-2.7 编程实践
-第二讲 程序控制结构--编程实践提交入口
-3.1 提纲
-3.2 函数声明、调用与定义
-3.3 函数调用栈框架
-3.4 编程实践
-第三讲 函数--编程实践提交入口
-4.1 提纲
-4.2 算法概念与特征
-4.3 算法描述
-4.4 算法设计与实现
-4.5 递归算法(一)
-4.6 递归算法(二)
-4.7 容错与计算复杂度
-4.8 编程实践
-第四讲 算法--编程实践提交入口
-5.1 提纲
-5.2 库与接口
-5.3 随机数库(一)
-5.4 随机数库(二)
-5.5 作用域与生存期
-5.6 典型软件开发流程(一)
-5.7 典型软件开发流程(二)
-5.8 编程实践
-第五讲 程序组织与开发方法--编程实践提交入口
-6.1 提纲
-6.2 字符
-6.3 数组(一)
-6.4 数组(二)
-6.5 结构体
-6.6 编程实践
-第六讲 复合数据类型--编程实践提交入口
-7.1 提纲
-7.2 指针基本概念
-7.3 指针与函数
-7.4 指针与复合数据类型(一)
-7.5 指针与复合数据类型(二)
-7.6 字符串
-7.7 动态存储管理(一)
-7.8 动态存储管理(二)
-7.9 引用
-7.10 编程实践
-第七讲 指针与引用--编程实践提交入口
-8.1 提纲
-8.2 数据抽象(一)
-8.3 数据抽象(二)
-8.4 链表(一)
-8.5 链表(二)
-8.6 链表(三)
-8.7 链表(四)
-8.8 函数指针(一)
-8.9 函数指针(二)
-8.10 抽象链表(一)
-8.11 抽象链表(二)
-8.12 编程实践
-第八讲 链表与程序抽象--编程实践提交入口
-9.1 提纲
-9.2 程序抽象与面向对象
-9.3 类类型
-9.4 对象(一)
-9.5 对象(二)
-9.6 类与对象的成员(一)
-9.7 类与对象的成员(二)
-9.8 类与对象的成员(三)
-9.9 继承(一)
-9.10 继承(二)
-9.11 继承(三)
-9.12 多态(一)
-9.13 多态(二)
-9.14 编程实践
-第九讲 类与对象--编程实践提交入口
-10.1 提纲
-10.2 四则运算符重载(一)
-10.3 四则运算符重载(二)
-10.4 关系与下标操作符重载
-10.5 赋值操作符重载(一)
-10.6 赋值操作符重载(二)
-10.7 赋值操作符重载(三)
-10.8 赋值操作符重载(四)
-10.9 赋值操作符重载(五)
-10.10 流操作符重载(一)
-10.11 流操作符重载(二)
-10.12 流操作符重载(三)
-10.13 操作符重载总结
-10.14 编程实践
-第十讲 操作符重载--编程实践提交入口
-11.1 提纲
-11.2 泛型编程概览
-11.3 异常处理机制(一)
-11.4 异常处理机制(二)
-11.5 运行期型式信息(一)
-11.6 运行期型式信息(二)
-11.7 模板与型式参数化
-11.8 题外话:术语翻译
-11.9 泛型编程实践(一)
-11.10 泛型编程实践(二)
-11.11 泛型编程实践(三)
-11.12 泛型编程实践(四)
-11.13 泛型编程实践(五)
-11.14 泛型编程实践(六)
-11.15 泛型编程实践(七)
-11.16 泛型编程实践(八)
-11.17 泛型编程实践(九)
-11.18 泛型编程实践(十)
-11.19 编程实践
-第十一讲 泛型编程--编程实践提交入口
-12.1 提纲
-12.2 程序执行环境(一)
-12.3 程序执行环境(二)
-12.4 程序执行环境(三)
-12.5 程序执行环境(四)
-12.6 输入输出(一)
-12.7 输入输出(二)
-12.8 文件系统
-12.9 设备
-12.10 库(一)
-12.11 库(二)
-12.12 makefile文件(一)
-12.13 makefile文件(二)
-12.14 makefile文件(三)
-12.15 编程实践
-第十二讲 Linux系统编程基础--编程实践提交入口
-13.01 提纲
-13.02 进程基本概念
-13.03 信号
-13.04 进程管理(一)
-13.05 进程管理(二)
-13.06 进程管理(三)
-13.07 进程间通信(一)
-13.08 进程间通信(二)
-13.09 进程间通信(三)
-13.10 进程间通信(四)
-13.11 进程池
-13.12 编程实践
-第十三讲 进程编程--编程实践提交入口
-14.1 提纲
-14.2 线程基本概念
-14.3 线程管理(一)
-14.4 线程管理(二)
-14.5 线程管理(三)
-14.6 线程管理(四)
-14.7 线程同步机制(一)
-14.8 线程同步机制(二)
-14.9 C++11线程库(一)
-14.10 C++11线程库(二)
-14.11 C++11线程库(三)
-14.12 C++11线程库(四)
-14.13 C++11线程库(五)
-14.14 编程实践
-第十四讲 线程编程--编程实践提交入口
-15.1 提纲
-15.2 Internet网络协议
-15.3 套接字(一)
-15.4 套接字(二)
-15.5 编程实践
-第十五讲 网络编程--编程实践提交入口