《TCP IP网络编程》第一章

news2024/9/23 23:24:30

        2023.6.28 正式开始学习网络编程。 每一章每一节的笔记都会记录在博客中以便复习。


第1章

1.1理解网络编程和套接字

        网络编程又叫套接字编程。所谓网络编程,就是编写程序使两台连网的计算机相互交换数据。 为什么叫套接字编程? 我们平常将插头插入插座上就能从电网中获取电力,同样的道理,为了与远程计算机进行数据传输,需要连接到因特网,而编程中的“套接字”就是用来链接网络的工具。

        服务器端创建的套接字又叫服务器端套接字或者监听套接字。 其请求连接的套接字创建过程分为四步:

  1. 调用socket函数创建套接字
  2. 调用bind函数分配IP地址和端口号
  3. 调用listen函数转为可接受请求状态
  4. 调用accept函数受理连接请求

        请求连接的客户端套接字创建过程如下两步:

  1. 调用socket函数创建套接字
  2. 调用connect函数向服务器端发送连接请求

        值得注意的是:创建完套接字,并不会马上区分为服务器端或客户端。 如果接下来紧接着调用bind、listen等函数则成为服务器端套接字;如果调用connect函数则称为客户端套接字。

        接下来在linux环境中编译并执行上述两个实例:hello_server.c文件和hello_client.c文件。

        分别对客户端和服务端程序进行编译:    

gcc hello_server.c -o hserver
gcc hello_client.c -o hclient

        该命令中的-o是用来指定可执行文件名的可选参数,因此,编译后将生成可执行文件hserver和hclient。

            运行:

./hserver 9190
./hclient 127.0.0.1 9190

        运行的时候,首先在 9190 端口启动服务,然后 heserver 就会一直等待客户端进行响应,当客户端监听位于本地的 IP 为 127.0.0.1 的地址的9190端口时,客户端就会收到服务端的回应,输出`Hello World!`。

        ps:执行过程中输入的127.0.0.1是本地计算机的IP地址。 如果在同一台计算机中同时运行服务器端和客户端,将采用这种连接方式。 但如果服务器端和客户端在不同计算机中运行,则应采用服务器端所在计算机的IP地址。


1.2基于Linux的文件操作

        在linux中,socket也是文件的一种,因此在网络数据传输过程中可以使用文件I/O相关的函数。而Windows需要区分socket和文件,因此在Windows中需要调用特殊的数据传输相关函数。

        每当生成文件或套接字,操作系统将返回分配给他们的整数,(即文件描述符),这个整数将成为程序员与操作系统之间良好沟通的渠道,实际上,文件描述符是为了方便称呼系统创建的文件或套接字而赋予的数。 文件描述符也成为文件句柄,“句柄”是Windows中的术语,Linux平台则使用“描述符”。

         low.open.c创建文件并保存文件数据,运行之后返回文件描述符3。用cat命令输出data.txt的文件内容,可以确认确实向文件传输了数据。

        low.read.c程序则通过read函数读取了data.txt中保存的数据。运行之后打印文件描述符以及文件的内容。 

        fd_seri.c 程序同时创建文件和套接字:

    fd1 = socket(PF_INET, SOCK_STREAM, 0);
    fd2 = open("test.dat", O_CREAT | O_WRONLY | O_TRUNC);
    fd3 = socket(PF_INET, SOCK_DGRAM, 0);

然后分别打印其文件描述符得到3、4、5,描述符从3开始以由小到大的顺序编号,因为0、1、2是分配给标注能I/O的描述符。如下图:

 1.3基于Windows平台的实现

        首先要为Windows套接字编程设置头文件和库。在vs(2022)中找到附加依赖项,然后写入ws2_32.lib即可。

        winsock初始化需要调用WSAStartup函数,注销库的时候需要调用WSACleanup函数。

1.4基于Windows的套接字相关函数及示例

略。

1.5 习题

1.套接字在网络编程中的作用是什么?为何称它为套接字?

        套接字是一种用于在网络上进行通信的编程接口。套接字允许不同计算机上的进程通过网络进行数据传输。它提供了一种机制,使得计算机之间可以建立连接、发送和接收数据。套接字使得应用程序能够利用网络进行通信,实现客户端和服务器之间的数据交换。

        它被称为套接字,是因为它类比于电话通信中的插座,作为网络通信的端点连接点。

2.在服务器端创建套接字后,会依次调用listen函数 和accept函数。请比较并说明二者作用。

        listen函数用于将套接字设置为被动监听模式,以接受客户端的连接请求。

        accept函数用于接受客户端的连接请求,并创建一个新的套接字来处理与该客户端的通信。

3.Linux中,对套接字数据进行I/O时可以直接使用文件I/O相关函数;而在Windows中则不可以,原因为何?

        这是因为在Unix-like系统中,包括Linux,一切皆文件的思想被广泛采用,将各种资源(包括套接字)都抽象为文件描述符的形式,统一了数据的读写接口。

        然而,在Windows操作系统中,套接字不被视为文件描述符,因此不能直接使用文件I/O相关函数进行数据的读写操作。

4.创建套接字后一般会给它分配地址, 为什么?为了完成地址分配需要调用哪个函数?

        在网络编程中,创建套接字后需要给它分配地址,主要是为了使其他计算机能够找到并与该套接字建立连接。通过分配地址,可以指定套接字的IP地址和端口号,从而唯一标识该套接字在网络中的位置。

        为了完成地址分配,需要调用bind函数。bind函数用于将套接字与特定的IP地址和端口号进行绑定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于传统检测算法hog+svm实现目标检测

直接上效果图: 代码仓库和视频演示b站视频004期: 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 代码展示: 数据集在data文件夹下 需要检测的目标对象数据集放在positive文件夹下 不需要的检测对象放在negative文件夹下…

如何提高个人领导力?

当今竞争激烈的商业环境中,领导力变得越来越重要。领导力不仅是一项人类的艺术和科学,还由对人和组织的理解、管理和激励能力组成。因此,不断提高自身的领导力水平是每个领导者必须面对的挑战。而对于想要提高自身领导力的读者来说&#xff0…

复习之linux中的远程登陆服务

一、实验环境配置 本次实验需要两台新的虚拟机,因此我们reset虚拟机aa 和 bb 修改虚拟机的主机名配置基础ip网络删除/root/.ssh/目录------恢复原始状态 1. 重置虚拟机aa,bb # westos-vmctl reset aa 2. 修改虚拟机的主机名 # hostnamectl set-hostname b…

结构体指针

结构体数组 #include<stdio.h> struct student {char name[20];int age;int scores[3];char addr[50]; }; int main() {struct student stu{"林冲",30,100,100,100,"汴京"};struct student* p;p&stu;//printf("%s\n",(*p).name);//pr…

Table表格(antd-design组件库)简单使用

1.Table表格 展示行列数据。 2.何时使用 当有大量结构化的数据需要展现时&#xff1b; 当需要对数据进行排序、搜索、分页、自定义操作等复杂行为时。 组件代码来自&#xff1a; 表格 Table - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-demo:hello-world rea…

网络环境TFTPNFS搭建

文章目录 1. TFTP服务搭建2. NFS 环境搭建 1. TFTP服务搭建 1、Ubuntu上搭建TFTP服务器&#xff0c;需要安装tftp-hpa和tftpd-hpa&#xff0c;命令如下&#xff1a; sudo apt-get install tftp-hpa tftpd-hpa sudo apt-get install xinetd2、TFTP也需要一个文件夹来存放文件…

VMware安装Centos7.6教程(保姆级教程)

目录 一、为安装系统做准备&#xff0c;划分空间 二、开始安装Centos7.6系统 2.1、挂载镜像 2.2、基础配置 2.3、手动分区 2.4、KDUMP配置 2.5、网络配置 2.6、安全配置 2.7、设定root密码与创建账户 2.8、其它 一、为安装系统做准备&#xff0c;划分空间 二、开始安…

Linux学习之SELinux简介

SELinux叫做安全增强的Linux版本。以前控制访问的时候&#xff0c;需要用户的权限和进程的权限进行控制。用户访问文件的时候&#xff0c;有两种访问控制&#xff0c;如下&#xff1a; 强制访问控制&#xff08;英语简写&#xff1a;MAC&#xff09; 自主访问控制&#xff08;英…

【中国互联网信息中心】第51次中国互联网络发展状况统计报告.pdf

【中国互联网信息中心】第51次中国互联网络发展状况统计报告

uniapp将图片转化为base64格式,并用url展示出来

效果图&#xff1a; 编码&#xff1a; <template><view class"container"><button click"chooseImage">选择图片</button><image v-if"base64Image" :src"base64Image"></image></view> &…

决策树 ID3 手工推导

掌握决策树ID3算法的原理&#xff0c;通过增益熵实现手工推导的过程。 参考案例&#xff1a;https://cuijiahua.com/blog/2017/11/ml_2_decision_tree_1.html 机器学习实战教程(二)&#xff1a;决策树基础篇之让我们从相亲说起 决策树 ID3 手工推导 决策树 ID3 简介 ID3作为一种…

【剑指offer专项突破版】二叉树篇——“C“

文章目录 前言一、二叉树剪枝题目分析思路分析代码 二、序列化与反序列化二叉树题目分析思路分析代码 三、从根节点到叶节点的路径数字之和题目分析思路分析代码 四、 向下的路径节点之和题目分析思路分析思路①代码思路②代码 五、节点之和最大的路径题目分析思路分析代码 六、…

Linux--查看Linux的体系结构以及内核版本:uname

语法&#xff1a; uname 选项功能&#xff1a; uname用来获取电脑和操作系统的相关信息。 选项&#xff1a; -a或–all 详细输出所有信息&#xff0c;依次为内核名称&#xff0c;主机名&#xff0c;内核版本号&#xff0c;内核版本&#xff0c;硬件名&#xff0c;处理器类型&a…

【2023比惨大会】测试惨吗?舍我其谁!

2023年&#xff0c;流行“比惨”。 作为一个测试员&#xff0c;惨吗&#xff1f;&#xff01; 看后不要太现实 自学软件测试三个月&#xff0c;然 简历石沉大海 2022年度的绩效&#xff0c;2023年都要过完了 辞职大半年了&#xff0c;至今没找到合适的工作 昨天还在流泪加班&…

《阿里大数据之路》研读笔记(2)

前面的笔记地址&#xff1a; 《阿里大数据之路》研读笔记&#xff08;1&#xff09;_后季暖的博客-CSDN博客 规范化和反规范化总结就是 规范化让总的单一维度变成多个维度 然后每个维度就是一张表这样 适合OLTP 可以参考三范式 这样是为了减少冗余 比如一个商品有多个类目&…

这些接口测试工具你一定要知道

接口测试工具 接口测试工具如图&#xff1a; 1.Fiddler 首先&#xff0c;这是一个HTTP协议调试代理工具&#xff0c;说白了就是一个抓http包的工具。web测试和手机测试都能用到这个工具。既然是http协议&#xff0c;这个工具也能支持接口测试。 2.PostMan Postman一款非常流行…

【已解决】Spring boot项目获取到resource目录下文件完整路径怎么获取 ?

在实际开发过程中&#xff0c;可能有时候&#xff0c;我们将文件放在resource下&#xff0c;在程序中需要获取到文件路径然后操作。比如&#xff0c;将公钥放到resource文件夹下&#xff0c;在程序中需要获取到这个公钥的完整路径。怎么操作&#xff1f; 需要访问的文件位置 获…

数据库课程设计(教室设备故障报修系统)

题目&#xff1a;教室设备故障报修系统 内容与要求&#xff1a; 完成需求分析&#xff0c;写出功能需求和数据需求描述&#xff1b;在需求分析的基础上&#xff0c;完成数据库概念结构设计、逻辑结构设计、物理结构设计和数据库创建&#xff1b;完成视图、存储过程设计&#xf…

使用阿里云实现短信验证码

首先去阿里云中开启短信服务 然后申请自己的签名&#xff0c;发送的短信模板&#xff0c;之后点击右上角的头像&#xff0c;点击AccessKey&#xff0c;选第一个就行&#xff0c;然后保存这两个对应的值。 在等待签名和发送模板通过审核之后就可以配置我们的发送方法&#xff0c…

Android Framework的重要性及其对行业前景的影响~

随着智能手机和移动应用的兴起&#xff0c;Android操作系统成为全球最大的移动操作系统&#xff0c;而Android Framework作为其核心组件之一&#xff0c;扮演着至关重要的角色。Android Framework提供了众多的API和工具&#xff0c;为开发者提供了构建功能丰富、高效稳定的Andr…