TCP/IP网络编程(1)——理解网络编程和套接字编程

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

一、理解网络编程和套接字编程

1.1 socket套接字

网络编程又称为套接字编程为什么要用套接字我们把插头插到插座上就能从电网获得电力供给同样为了与远程计算机进行数据传输需要连接到因特网而编程中的“套接字”就是用来连接该网络的工具。它本身就带有“连接”的含义如果将其引申则还可以表示两台计算机之间的网络连接

1.1.1 一个例子来表示TCP的网络连接

因为拨打和接听是有区别的,因此需要分开看表示

  • 接听方的流程如下

    1. 首先需要安装一台电话机

    在这里插入图片描述
    2. 准备好电话机后要考虑分配电话号码的问题这样别人才能联系到自己

    在这里插入图片描述
    在这里插入图片描述
    3. 用blind函数给套接字分配地址后电话机就装好了。接下来需要连接电话线并等待来电

    在这里插入图片描述
    4. 连接好电话线后如果有人拨打就会响铃这时候需要拿起电话线才能对话

    在这里插入图片描述

  • 打电话的流程如下

    1. 和上面一样调用socket套接字
    2. 调用connect函数

    在这里插入图片描述

1.1.2 程序实现

所有的内容是在Linux系统下实现因此该程序只支持Linux

服务端代码如下
在这里插入图片描述

客户端代码如下
在这里插入图片描述

实现
代码获取程序下载

我是用visual studio开发在Linux虚拟机下部署文件并且实行定位到两个文件位置执行两个文件注意在文件后面需要加一个端口号(这边用到9091可以自定义5000-6535都可)

在这里插入图片描述

1.2 文件操作

1.2.1 文件描述符

实际上文件描述符是为了方便称呼操作系统创建的文件或套接字而赋予的
试想一下“把那本18号书帮我打印一下” 比 “把那本叫《物联网感知、识别与控制技术》的书帮我打印一下”是不是更简介明了
文件描述符有时也称为文件句柄但“句柄”主要是Windows中的术语。因此本书中如果涉及Windows平台将使用“句柄”如果是Linux平台则用描述符

分配给标准输入输出及标准错误的文件描述符。

文件描述符对象
0标准输入Standard Input
1标准输出Standard Output
2标准错误Standard Error
  • 打开文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *path, int flag);
/*
成功时返回文件描述符失败时返回-1
path : 文件名的字符串地址
flag : 文件打开模式信息
*/

文件打开模式如下表

打开模式含义
O_CREAT必要时创建文件
O_TRUNC删除全部现有数据
O_APPEND维持现有数据保存到其后面
O_RDONLY只读打开
O_WRONLY只写打开
O_RDWR读写打开
  • 关闭文件
#include <unistd.h>
int close(int fd);
/*
成功时返回 0 失败时返回 -1
fd : 需要关闭的文件或套接字的文件描述符
*/
  • 将数据写入文件
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t nbytes);
/*
成功时返回写入的字节数 失败时返回 -1
fd : 显示数据传输对象的文件描述符
buf : 保存要传输数据的缓冲值地址
nbytes : 要传输数据的字节数
*/

在此函数的定义中size_t 是通过 typedef 声明的 unsigned int 类型。对 ssize_t 来说ssize_t 前面多加的 s 代表 signed 即 ssize_t 是通过 typedef 声明的 signed int 类型。

  • 读取文件中的数据

与之前的write()函数相对应read()用来输入接收数据。

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t nbytes);
/*
成功时返回接收的字节数但遇到文件结尾则返回 0失败时返回 -1
fd : 显示数据接收对象的文件描述符
buf : 要保存接收的数据的缓冲地址值。
nbytes : 要接收数据的最大字节数
*/
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6