当前课程知识点:基于Linux的C++ >  第十五讲 网络编程 >  15.3 套接字(一) >  LinuxCPP1503

返回《基于Linux的C++》慕课在线视频课程列表

LinuxCPP1503在线视频

LinuxCPP1503

下一节:LinuxCPP1504

返回《基于Linux的C++》慕课在线视频列表

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()这个函数

接受客户的连接

然后就会为这样一个连接

创建一个新的套接字

它就会创建一个新的套接字

和这个客户构造一个新的连接

就把它拧紧

像两个管子一样把它拧上

套接上 完事了

它们俩就可以通讯了

它的主套接字呢

还可以进一步地

继续侦听下一个客户的连接

基于Linux的C++课程列表:

第一讲 C/C++基本语法元素

-1.1 提纲

--LinuxCPP0101

-1.2 程序设计的基本概念

--LinuxCPP0102

-1.3 简单C/C++程序介绍

--LinuxCPP0103

-1.4 程序设计的基本流程

--LinuxCPP0104

-1.5 基本语法元素

--LinuxCPP0105

-1.6 程序设计风格

--LinuxCPP0106

-1.7 编程实践

--LinuxCPP0107

-第一讲 C/C++基本语法元素--编程实践提交入口

第二讲 程序控制结构

-2.1 提纲

--LinuxCPP0201

-2.2 结构化程序设计基础

--LinuxCPP0202

-2.3 布尔数据

--LinuxCPP0203

-2.4 分支结构

--LinuxCPP0204

-2.5 break语句

--LinuxCPP0205

-2.6 循环结构

--LinuxCPP0206

-2.7 编程实践

--LinuxCPP0207

-第二讲 程序控制结构--编程实践提交入口

第三讲 函数

-3.1 提纲

--LinuxCPP0301

-3.2 函数声明、调用与定义

--LinuxCPP0302

-3.3 函数调用栈框架

--LinuxCPP0303

-3.4 编程实践

--LinuxCPP0304

-第三讲 函数--编程实践提交入口

第四讲 算法

-4.1 提纲

--LinuxCPP0401

-4.2 算法概念与特征

--LinuxCPP0402

-4.3 算法描述

--LinuxCPP0403

-4.4 算法设计与实现

--LinuxCPP0404

-4.5 递归算法(一)

--LinuxCPP0405

-4.6 递归算法(二)

--LinuxCPP0406

-4.7 容错与计算复杂度

--LinuxCPP0407

-4.8 编程实践

--LinuxCPP0408

-第四讲 算法--编程实践提交入口

第五讲 程序组织与开发方法

-5.1 提纲

--LinuxCPP0501

-5.2 库与接口

--LinuxCPP0502

-5.3 随机数库(一)

--LinuxCPP0503

-5.4 随机数库(二)

--LinuxCPP0504

-5.5 作用域与生存期

--LinuxCPP0505

-5.6 典型软件开发流程(一)

--LinuxCPP0506

-5.7 典型软件开发流程(二)

--LinuxCPP0507

-5.8 编程实践

--LinuxCPP0508

-第五讲 程序组织与开发方法--编程实践提交入口

第六讲 复合数据类型

-6.1 提纲

--LinuxCPP0601

-6.2 字符

--LinuxCPP0602

-6.3 数组(一)

--LinuxCPP0603

-6.4 数组(二)

--LinuxCPP0604

-6.5 结构体

--LinuxCPP0605

-6.6 编程实践

--LinuxCPP0606

-第六讲 复合数据类型--编程实践提交入口

第七讲 指针与引用

-7.1 提纲

--LinuxCPP0701

-7.2 指针基本概念

--LinuxCPP0702

-7.3 指针与函数

--LinuxCPP0703

-7.4 指针与复合数据类型(一)

--LinuxCPP0704

-7.5 指针与复合数据类型(二)

--LinuxCPP0705

-7.6 字符串

--LinuxCPP0706

-7.7 动态存储管理(一)

--LinuxCPP0707

-7.8 动态存储管理(二)

--LinuxCPP0708

-7.9 引用

--LinuxCPP0709

-7.10 编程实践

--LinuxCPP0710

-第七讲 指针与引用--编程实践提交入口

第八讲 链表与程序抽象

-8.1 提纲

--LinuxCPP0801

-8.2 数据抽象(一)

--LinuxCPP0802

-8.3 数据抽象(二)

--LinuxCPP0803

-8.4 链表(一)

--LinuxCPP0804

-8.5 链表(二)

--LinuxCPP0805

-8.6 链表(三)

--LinuxCPP0806

-8.7 链表(四)

--LinuxCPP0807

-8.8 函数指针(一)

--LinuxCPP0808

-8.9 函数指针(二)

--LinuxCPP0809

-8.10 抽象链表(一)

--LinuxCPP0810

-8.11 抽象链表(二)

--LinuxCPP0811

-8.12 编程实践

--LinuxCPP0812

-第八讲 链表与程序抽象--编程实践提交入口

第九讲 类与对象

-9.1 提纲

--LinuxCPP0901

-9.2 程序抽象与面向对象

--LinuxCPP0902

-9.3 类类型

--LinuxCPP0903

-9.4 对象(一)

--LinuxCPP0904

-9.5 对象(二)

--LinuxCPP0905

-9.6 类与对象的成员(一)

--LinuxCPP0906

-9.7 类与对象的成员(二)

--LinuxCPP0907

-9.8 类与对象的成员(三)

--LinuxCPP0908

-9.9 继承(一)

--LinuxCPP0909

-9.10 继承(二)

--LinuxCPP0910

-9.11 继承(三)

--LinuxCPP0911

-9.12 多态(一)

--LinuxCPP0912

-9.13 多态(二)

--LinuxCPP0913

-9.14 编程实践

--LinuxCPP0914

-第九讲 类与对象--编程实践提交入口

第十讲 操作符重载

-10.1 提纲

--LinuxCPP1001

-10.2 四则运算符重载(一)

--LinuxCPP1002

-10.3 四则运算符重载(二)

--LinuxCPP1003

-10.4 关系与下标操作符重载

--LinuxCPP1004

-10.5 赋值操作符重载(一)

--LinuxCPP1005

-10.6 赋值操作符重载(二)

--LinuxCPP1006

-10.7 赋值操作符重载(三)

--LinuxCPP1007

-10.8 赋值操作符重载(四)

--LinuxCPP1008

-10.9 赋值操作符重载(五)

--LinuxCPP1009

-10.10 流操作符重载(一)

--LinuxCPP1010

-10.11 流操作符重载(二)

--LinuxCPP1011

-10.12 流操作符重载(三)

--LinuxCPP1012

-10.13 操作符重载总结

--LinuxCPP1013

-10.14 编程实践

--LinuxCPP1014

-第十讲 操作符重载--编程实践提交入口

第十一讲 泛型编程

-11.1 提纲

--LinuxCPP1101

-11.2 泛型编程概览

--LinuxCPP1102

-11.3 异常处理机制(一)

--LinuxCPP1103

-11.4 异常处理机制(二)

--LinuxCPP1104

-11.5 运行期型式信息(一)

--LinuxCPP1105

-11.6 运行期型式信息(二)

--LinuxCPP1106

-11.7 模板与型式参数化

--LinuxCPP1107

-11.8 题外话:术语翻译

--LinuxCPP1108

-11.9 泛型编程实践(一)

--LinuxCPP1109

-11.10 泛型编程实践(二)

--LinuxCPP1110

-11.11 泛型编程实践(三)

--LinuxCPP1111

-11.12 泛型编程实践(四)

--LinuxCPP1112

-11.13 泛型编程实践(五)

--LinuxCPP1113

-11.14 泛型编程实践(六)

--LinuxCPP1114

-11.15 泛型编程实践(七)

--LinuxCPP1115

-11.16 泛型编程实践(八)

--LinuxCPP1116

-11.17 泛型编程实践(九)

--LinuxCPP1117

-11.18 泛型编程实践(十)

--LinuxCPP1118

-11.19 编程实践

--LinuxCPP1119

-第十一讲 泛型编程--编程实践提交入口

第十二讲 Linux系统编程基础

-12.1 提纲

--LinuxCPP1201

-12.2 程序执行环境(一)

--LinuxCPP1202

-12.3 程序执行环境(二)

--LinuxCPP1203

-12.4 程序执行环境(三)

--LinuxCPP1204

-12.5 程序执行环境(四)

--LinuxCPP1205

-12.6 输入输出(一)

--LinuxCPP1206

-12.7 输入输出(二)

--LinuxCPP1207

-12.8 文件系统

--LinuxCPP1208

-12.9 设备

--LinuxCPP1209

-12.10 库(一)

--LinuxCPP1210

-12.11 库(二)

--LinuxCPP1211

-12.12 makefile文件(一)

--LinuxCPP1212

-12.13 makefile文件(二)

--LinuxCPP1213

-12.14 makefile文件(三)

--LinuxCPP1214

-12.15 编程实践

--LinuxCPP1215

-第十二讲 Linux系统编程基础--编程实践提交入口

第十三讲 进程编程

-13.01 提纲

--LinuxCPP1301

-13.02 进程基本概念

--LinuxCPP1302

-13.03 信号

--LinuxCPP1303

-13.04 进程管理(一)

--LinuxCPP1304

-13.05 进程管理(二)

--LinuxCPP1305

-13.06 进程管理(三)

--LinuxCPP1306

-13.07 进程间通信(一)

--LinuxCPP1307

-13.08 进程间通信(二)

--LinuxCPP1308

-13.09 进程间通信(三)

--LinuxCPP1309

-13.10 进程间通信(四)

--LinuxCPP1310

-13.11 进程池

--LinuxCPP1311

-13.12 编程实践

--LinuxCPP1312

-第十三讲 进程编程--编程实践提交入口

第十四讲 线程编程

-14.1 提纲

--LinuxCPP1401

-14.2 线程基本概念

--LinuxCPP1402

-14.3 线程管理(一)

--LinuxCPP1403

-14.4 线程管理(二)

--LinuxCPP1404

-14.5 线程管理(三)

--LinuxCPP1405

-14.6 线程管理(四)

--LinuxCPP1406

-14.7 线程同步机制(一)

--LinuxCPP1407

-14.8 线程同步机制(二)

--LinuxCPP1408

-14.9 C++11线程库(一)

--LinuxCPP1409

-14.10 C++11线程库(二)

--LinuxCPP1410

-14.11 C++11线程库(三)

--LinuxCPP1411

-14.12 C++11线程库(四)

--LinuxCPP1412

-14.13 C++11线程库(五)

--LinuxCPP1413

-14.14 编程实践

--LinuxCPP1414

-第十四讲 线程编程--编程实践提交入口

第十五讲 网络编程

-15.1 提纲

--LinuxCPP1501

-15.2 Internet网络协议

--LinuxCPP1502

-15.3 套接字(一)

--LinuxCPP1503

-15.4 套接字(二)

--LinuxCPP1504

-15.5 编程实践

--LinuxCPP1505

-第十五讲 网络编程--编程实践提交入口

课程文档

-课程PDF文件

LinuxCPP1503笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。