黑马程序员_网络编程

黑马linux网络编程 1、协议 2、分层模型结构 3、c/s模型:client-server 4、b/s模型:browser-server 5、网络传输流程: 6、以太网帧协议: 7、IP协议 8、UDP 9、IP协议: 10、网络套接字 socket 11、网络字节序 12、IP地址转换函数 13、sockaddr地址结构 14、网络套接字函数 15、TCP通信流程分析 16、三次握手协议 17、四次挥手 18、滑动窗口 19、错误处理函数: 阅读详情

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 

网络编程

一、网络编程概述

网络通讯,简单来说就是通过网络实现信息传输,像QQ,微信这些时下最流行的通讯工具,这些都是基于网络进行传输的。

网络通讯要素:IP地址,端口号,传输协议。

网络模型:OSI模型 TCP/IP模型。

对于网络通信要素的理解:

第一:我们有两台主机,想要把信息从一台主机A上传输到另一台主机上B,那么就得先找到这台主机的在哪儿,这里就需要IP地址,有点类似我们打电话,我自己有一部电话,想给另一个同学打电话,那么就必须知道这个同学的手机号,IP地址的作用就是类似手机号,通过IP地址主机A就可以找到主机B。

第二:主机是找到了,信息时传输过去了,但是解析的话拿那个程序来解析。如果主机A从QQ上发了一条信息,找到主机B,但是这个条信息被暴风影音给获取了,那么这条信息就读取不出来,所以,必须找到相应的软件程序,这里就需要端口号,就是说给相应的软件程序进行数字标识,方便把信息发到指定的软件程序上,为了方便称呼这个数字,就叫做端口(逻辑端口)。

第三:找地址,找端口,都解决了,再回到信息传输上。如果主机A发出的信息时中文,而主机B只能读取英文,那么信息即便传输了但是是无效的,所以要彼此间定义一个通讯规则,这个规则称为协议。一般通用协议为TCP/IP,当然还有其他的通讯协议,比如某个企业自己内部可能就有自己的通讯协议,这样提高信息安全性。

 

 

1、关于IP地址

是网络设备的标识,IP地址是四字节的,如:192.168.1.1而每个字节的最大数是255,就是说,IP地址每位的最大值是255。有一个特殊的IP地址,127.0.0.1这是一个本地回环地址。打开电脑就会发现,在IP地址下面还有一个子网掩码,这是因为IP地址不够用,所以采用区域的方法来处理,就是某一区域只用一个IP地址,这个区域里的用户都是属于这个IP地址中的局域网,共享这个IP地址。

IP地址不宜记忆,通常会起个名字,名字和IP地址相关联,比如自己的主机名称。上面的时候,通常会在地址栏中加入一个地址值,比如www.baidu.com,这其实就是百度的IP地址所关联的名字。

2、关于端口

端口值为0-65535,通常情况下0-1024端口通常被系统所保留使用了。这个使用时要注意。

3、关于通讯规则

两个协议:TCP 和UDP

 

网络模型

         TCP/IP模型来说,它分为四层:第一层应用层,第二层传输层,第三层网际层,第四场主机至网络层。在数据往出发的时候,先在应用层,应用层对其进行封装,然后在传输层,传输层对其进行进一步封装,依次类推,相当于一个加包的过程;数据接收时,从第四层开始解析,一层层向上,最后到应用层,相当于一个拆包的过程。这就是一个一个模型。

当前网络编程就出来传输层和网际层。

二、网络编程应用

对IP地址的操作:

使用到InetAddress类,这个类没有构造函数,不能直接创建对象,常用的方法:

1、获取InetAddress对象,InetAddress  I =InetAddress.getLocalHost();这个是获取本地主机IP地址对象。更常用的这个InetAddress inet = InetAddress.getByName(“要获取的主机名或IP地址”);

2、获取地址和主机名。有了对象后,调用getHostName()方法即可调出主机名,使用getHostAddress(),就可以获取目标的IP地址。

 

 

通讯规则:

通讯规则分为两种:UDP和TCP

UDP:是面向无连接的,就是说,传输数据不必须和对方建立连接,不管对方是否在线,我就会发送数据,对方在了,就会收到,不再数据就丢掉。数据被封装成数据包,每个包的大小不超过64k。这个规则,使得数据传输速度很快,效率高,通常用于聊天,视频会议等等。

UDP特点总结:

1、UDP会将数据及源和目的封装成数据包,不需要建立连接。

2、每个数据包的大小限制在64k以内

3、因为是无连接的,是不可靠的协议

4、不需要建立连接,速度快

 

TCP:是面向连接的,就是说,彼此建立连接信息才能传输,而且可以大量传输。建立的时候,需要彼此知会一声,比如说A连接B,不是直接就连接上,而是A发一段信息给B,问B连接上了么,然后B收到的话再给A回复,但是如果A不再做回复的话,B就不知道A收没收到信息,所以A必须再做一次回复。这样连接才会建立。常见的情况有,下载电影等等。

TCP总结特点:

1、建立连接,形成数据传输通道

2、在连接中可进行大数据量的传输

3、通过三次握手完成连接,是可靠协议

4、必须建立连接,效率会低

 

 

那我们建立通讯的话,在java中就得先有对象。java中的Socket就是为网络服务的。

简单来说,Socket就是为网络服务提供的一种机制,且通讯两端都的有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。

 

 

 

UDP传输

建立UDP发送端

直接写建立步骤:

1、创建UDP服务,通过DatagramSocket对象。

         DategreamSocket  ds = new DatagramSocket();

         作为发送端,其实也是有一个端口,当我建立socket服务,发送数据的时候,系统会随机指定端口。如果想固定发送端口,就在DatagramSocket对象中,加入端口值。

         DatagramSocket  ds  =new DatagramSocket(8000);

这样就指定了发送端的端口

2、确定数据,并封装成数据包:DategramPacket(byte[] buf ,int length ,InetAddress ,address, int port)

         byte[]buf = “UDP服务端”.getBytes();

         DategramPacket  dp =

                            new DatagramPacket(buf,buf.length,InetAddress.getByName(“124.0.0.1”),8000);

3、通过socket服务,将已有的数据包发送出去,用send方法

         ds.send(dp);

4、关闭资源

         ds.close();

这样一个UDP发送端就建立完成了,但是UDP是面向无连接的,所以即便对方没有在,数据也会发送出去,只是最后全部丢失了。所以我们闲杂就建立一个UDP接收端:

UDP接受端建立步骤:

1、建立DatagramSocket服务,监听一个端口

         DatagramSocket  ds = new DatagramSocket(8000);

2、因为发送端会发送一个数据包过来,所以在接受端就定义一个DatagramPacket包来存储。

         byte[]buf = new byte[1024];

DatagramPacket  dp = new DatagramPacket(buf,buf.length);

3、用receive方法将接受到的数据存入数据包

         ds.receive(dp);

4、通过数据包的方法获取包中的数据

         Stringip = dp.getAddress().getHostAddress();获取主机IP地址

         Stringdata = new String( dp.getDate(),0,dp.getLength());获取数据

         intport = dp.getPort();获取端口

5、关闭资源

         ds.close();

 

 

 

注意,我们在创建DatagramSocket服务时,不能让两个DatagramSocket对象接听同一个端口。IP地址中有两个地址特殊,一个是192.168.1.0,代表网络段,一个是192.168.255代代表的是广播地址,注意是每个网络段都有这么两个,就是说你本机如果是127.0.0.1的话,那么127.0.0.0就是代表你这网络段,127.0.0.255就是这个段的广播。

 

 

 

TCP传输

UDP在建立的时候,是发送端和接收端,而TCP因为是面向连接的,所以它分为客户端和服务端。进行TCP传输,需要建立客户端和服务端。建立连接后通过Socket正的IO流进行数据的传输。

同样,客户端和服务端是两个独立的应用程序。

TCP传输:

客户端:Socket

服务端:ServerSocket

 

 

客户端:

通过查阅socket对象,发现该对象建立时,就可以去连接指定主机,因为TCP是面向连接的,所以在建立socket服务时,就要有服务端存在,并连接成功,形成通路货,在该公道进行数据传输。

 

步骤:

1、创建Socket服务,指定要连接的主机地址和端口

         Sockets = new Socket(“127.0.0.1”,10000);

2、为了发送数据,应该获取Socket流中的输出流

         OutputStream  out =  s.getOutputStream();

         out.write(“”connectionis ok);

3、关闭资源

         s.close();

 

 

服务端:

步骤:

1、建立服务端的Socket服务,通过ServerSocket服务,并绑定一个端口

         ServerSocketss = new ServerSocket(10000);

2、获取连接过来的客户端对象,accept方法获取客户端对象,返回时一个Socket。这方法时阻塞式的,没有连接就要等。

         Sockets = ss.accept();

3、客户端如果发送来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。

         InputStreamin = s.getInputStream();

         //读取数据就可以

         byte[]buf = new byte[1024];

         intlen = in.read(buf);

        

 

 

当我们在建立TCP服务端和客户端时,如果可以相互发送数据,那么必然就用到IO流,所以要注意两点:一、字符流需要刷新,就是使用flush()方法。二、readLine是阻塞式方法,这个方法判断读取完一句的信号是换行符,比如当客户端想服务端发送一行字符,其实只是把这串字符发送过去了,换行符并没有发送过去,所以要加上换行符,并且最后一定要刷新。

 

 

 

URL

专门用于处理URL的对象

其构造函数会接受一个字符串url。

URL url = new URL(“http://127.0.0.1:8080/myweb/demo.html”);

创建这个对象后,就可以通过里面的方法分别获取到次url的文件名,主机名,路劲,端口等各种信息

 String

getFile()
            
获取此URL的文件名。

 String

getHost()
            
获取此URL的主机名(如果适用)。

 String

getPath()
            
获取此URL的路径部分。

 int

getPort()
            
获取此URL的端口号。

 String

getProtocol()
            
获取此URL的协议名称。

 String

getQuery()就是在url最后加上一部分信息,通过&&连接
            获取此URL的查询部分。

 

我们注意到,URL里封装的是一个地址,按照前面所学的socket来说,ip,端口,都拥有,是否就可以直接通过这个对象来访问目标呢?

URL里面有个方法为,OpenConnection,这个方法会返回一个URLConnection,就是说,这就方法就会连接到地址中的主机。

URLConnection conn = url.OpenConnnection();

URLConnection是一个抽象类,这个类的实现子类中有两个方法:

1、getInputStream

2、getOutputStream

这两个方法使用和socket中的一样,而且,没有消息头。

 

 

小知识部分:

1、SocketAddress,这个类的子类对象时封装的ip地址和端口号。而之前我们所学习的InetAddress是封装的ip地址。

2、ServerSocket,在构造函数中有个够着函数会接收一个int backlog,这个表示的意思,是这个服务器最多的连接数。

 

 

 

域名解析

我们通常在浏览器中输入的网址,访问到指定ip地址的过程是这样的。

1、浏览器中输入的一般是主机名,如www.baidu.com

2、访问是需要ip地址,需要把主机名翻译成ip地址,这就需要域名解析,DNS

3、每个电信供应商都有一个DNS,DNS都有对应的主机名的ip地址,主机名和ip地址有映射关系

4、我们电脑访问www.baidu.com,会在DNS的服务器,找到对应的ip地址,再给我们发回来,然后再直接通过此ip地址寻找。

5、但,在去DNS服务器寻找之前,总会现在本机上的c:\window\systems\drivers\ext\host 这个目录下进行查询,看是否有对应的IP地址。

 

总结一下:

1、域名解析路径:主机名,到本机查询,如果对应的ip地址,则直接访问此ip地址;如果没有,则到对应电信运营商的DNS服务器,找到对应的ip地址,然后进行访问

2、应用:1)自己可以直接在host中配置ip地址,加快我们访问速度。ip地址可以同个getByName方法获取

                    2)软件自动更新地址的关闭,可以长时间使用软件

                    3)对恶意网址配置本地回环地址127.0.0.1,
Claude Code Router 401错误修复 claude code router配置相关环境变量问题 阅读详情

相关推荐

用Python实现古诗词填字游戏(三)

古诗词做填字游戏的第三部分代码,也是最核心的部分。实现对诗文和关键字的选定,并确定文字的输出位置。

PosPro的专栏 6117

黑马程序员————java中的网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- java中的网络编程 一.网络编程概述:基于互联网的编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 二.网络模型:OSI和TCP/IP 1.OSI(Open System Interconnection开放系统互连)参考模型 网络模型7层概述:

lgplf的博客 968

Linux命令行入门:从零掌握服务器运维与Shell脚本基础

在信息化时代,操作系统是数字世界的基石,而终端命令行则是高效驾驭服务器的核心技能。无论是软件部署、服务监控还是故障排查,掌握基于Shell的指令操作都能大幅提升工程效率。从最基础的文件目录管理、文本处理,到权限控制、进程监控与网络调试,命令行提供了一套强大且可自动化的操作范式。尤其对于运维工程师和开发者而言,理解管道、重定向以及脚本化任务,意味着将重复劳动转化为可复用的自动化流程。本文从环境准备讲起,系统梳理常用Linux命令的实际场景与输出验证,并延伸至Shell脚本编写与定时任务,帮助初学者快速建立从操

weixin_30522983的博客 255

黑马全套Java教程(九):网络编程

黑马全套Java教程(一) 黑马全套Java教程(二) 黑马全套Java教程(三) 黑马全套Java教程(四) 黑马全套Java教程(五) 黑马全套Java教程(六) 黑马全套Java教程(七) 黑马全套Java教程(八) 黑马全套Java教程(九) 本博客开始记录黑马教学的Java入门新视频,从d168开始,博客只做代码记录,方便后续快速复习,视频链接例:方法一 优点:代码简单 缺点:存在单继承的局限性,线程类继承Thread后,不能继承其他类,不便于扩展 方法二:实现runnable接口 优点:线程任

zdb 1584

嵌入式人工智能(18-基于树莓派4B的继电器JQC-3FF-S-Z)

本次实验的输出端控制不会接强电,就用LED灯来模拟即可,由于我那个流水灯模块是低电平点亮,所以接线稍有不同,同学们注意。只有继电器吸合,输出端的NO与COM就导通,给LED低电平然后就亮,否则继电器断开,NO与COM不导通,LED不亮。原理都一样,控制电流的接通与断开,这个模块看起来还简单点,毕竟还有2个指示灯,下端IN如接上电源红灯亮,继电器动作有电流通过绿灯亮。在实际应用中,可以通过编程控制继电器的通断状态,例如在Python编程中设置继电器模块的通断时间,从而实现自动化控制。

u010152658的博客 2531

一文整理深度学习【深度学习linux的docker+pytorch+cuda+nvidia-docker+vscode配置】

docker+pytorch+cuda+nvidia-docker+vscode

Edward的博客 1335

黑马程序员——网络编程的应用

-应用一 需求: 客户端通过键盘输入用户名 服务端对这个用户名进行校验  然后该用户名存在,在服务端显示 XXX,登录成功 并在客户端显示:欢迎你,XXX 如果某不存在的用户 在登录,在服务端显示XXX,尝试登录 并在客户端显示: 用户XXX,不存在 最多可以尝试登录3次 package day24; import java.io.*; import java.net.*;

kolen001的专栏 434

Cesium 场景特效之【全球海洋】GL2兼容版

Cesium 场景特效之【全球海洋】GL2兼容版

喜欢钻研前端和分享技术 1279

黑马网络编程学习

java网络编程的基础学习

Lhipg_的博客 391

SAP FI 会计科目表(COA)可直接套用配置模板

摘要:本文提供了SAP S/4HANA环境下可直接套用的会计科目表(COA)配置模板,包含科目编码规则、号段规划、科目组设置等核心内容。模板采用10位数字编码,按资产(1000)、负债(2000)、权益(3000)、成本(4000)、收入(5000)、费用(6000)六大类划分号段,并预设科目组控制字段状态。适用于集团/单一公司、国内/跨国企业场景,支持多表架构映射,配置完成后可通过事务码SAKO验证科目清单。模板遵循"前4位固定一级科目"原则,企业可根据行业特性调整明细科目。

金牌架构师 267

推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐,业界广告推荐技术最新进展

推荐算法其实本质上是一种信息处理逻辑,当获取了用户与内容的信息之后,按照一定的逻辑处理信息后,产生推荐结果。热度排行榜就是最简单的一种推荐方法,它依赖的逻辑就是当一个内容被大多数用户喜欢,那大概率其他用户也会喜欢。但是基于粗放的推荐往往会不够精确,想要挖掘用户个性化的,小众化的兴趣,需要制定复杂的规则运算逻辑,并由机器完成。召回:当用户以及内容量比较大的时候,往往先通过召回策略,将百万量级的内容先缩小到百量级。

丨汀、的博客 7591

黑马程序员系统编程_网络编程(讲义、笔记)

黑马程序员系统编程_网络编程(讲义、笔记) 链接:https://pan.baidu.com/s/1w78sxegdeLYy6MQ0zCa_Lw 提取码:yyds 复制这段内容后打开百度网盘手机App,操作更方便哦 转自: https://www.bilibili.com/video/BV1iJ411S7UA?p=127&spm_id_from=pageDriver ...

qq_44690575的博客 1510

R语言机器学习算法实战系列(四)随机森林算法分类器+SHAP值 (Random Forest)

本文介绍了如何使用R语言实现随机森林算法,用于构建乳腺癌分类器。随机森林通过多棵决策树投票判断标签,具有避免偏差和提升模型效果的优势。文章详细讲解了数据下载、R包加载、数据预处理、特征选择、模型构建与评估等步骤。数据集包含569份恶性和良性肿瘤样本的32类指标,通过随机森林模型进行特征选择和分类。最终,文章提供了完整的代码和可视化结果,帮助读者理解并实现随机森林算法。

专注生信领域 3321

黑马程序员Linux网络编程学习资料

黑马程序员Linux网络编程学习资料 【下载地址】黑马程序员Linux网络编程学习资料 《黑马程序员Linux网络编程学习资料》是一份专为开发者打造的深度指南,涵盖网络基础、socket编程及高并发服务器设计等核心内容。通过详实的文档与源码分析,读者可以系统掌握Linux环境下的网络编程技术,从基础概念到实际应用一应俱全...

gitblog_06796的博客 457

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

黑马程序员Linux网络编程学习资料:网络编程领域的宝藏资源

黑马程序员Linux网络编程学习资料:网络编程领域的宝藏资源 【下载地址】黑马程序员Linux网络编程学习资料 《黑马程序员Linux网络编程学习资料》是一份专为开发者打造的深度指南,涵盖网络基础、socket编程及高并发服务器设计等核心内容。通过详实的文档与源码分析,读者可以系统掌握Linux环境下的网络编程技术,从基...

gitblog_06746的博客 433

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

黑马程序员网络编程

------- android培训、java培训、期待与您交流! ---------- 黑马程序员网络编程 目前较为流行的网络编程模型是客户机/服务器结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出请求。服务器始终运行,监听网络端口,一旦有客户请求,就会启动一个服务线程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。 TCP是

lamstudyingnet的专栏 658

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

黑马程序员-网络编程

-----------android培训、java培训、java学习型技术博客、期待与您交流! ------------ 一、网络编程: 1、为什么需要网络编程技术? IO技术的存在是为了更加便捷的操作数据,但是存在问题那就是对数据的操作只限于本机内数据操作,通俗的话就是说你玩的都是单机,不能和其他用户共享数据,也就是说不能把本机上的数据发给其他的电脑上的应用程序,打

达达的专栏 1842

黑马程序员—网络编程

-------------------------------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 1:网络编程(理解) (1)就是通过Java语言实现不同计算机的数据交换和信息共享。 (2)网络编程三要素: A:IP地址 在网络中唯一标识一台计算机的。 B:端

u012573367的专栏 496

黑马程序员——网络编程

网络编程 1、什么是网络编程 网络编程的本质是两个设备之间的数据交换 网络模型 OSI参考模型 TCP/IP参考模型   2、网络通讯要素 IP地址 端口号 传输协议   IP地址:InetAddress 网络中设备的标识 不易记忆,可用主机名 本地回环地址:127.0.0.1  主机名:localhost 端口号 用于标识进程的逻辑地址,不同进程的标识 有

lqf123lrf的专栏 263

Linux网络编程——黑马程序员笔记

01P-复习-Linux网络编程 02P-信号量生产者复习 03P-协议 协议: 一组规则。 04P-7层模型和4层模型及代表协议 分层模型结构: OSI七层模型: 物、数、网、传、会、表、应 TCP/IP 4层模型:网(链路层/网络接口层)、网、传、应 应用层:http、ftp、nfs、ssh、telnet。。。 传输层:TCP、UDP 网络层:IP、ICMP、IGMP 链路层:以太网帧协议、ARP 05P-网络传输数据封装流程 网络传输流程: 数据没有封装之前,是不能在网络中传递。

zhuguanlin121的博客 3413

黑马程序员——网络编程基础

黑马程序员——网络编程基础 网络编程 所谓网络编程,即是Socket编程,在进行网络编程之前,我们需要知道如何获取本机或者他机的IP。 通过导入java.net包内的InetAddress类,通过其静态方法,我们可以获取到本机或者他机的IP地址。通过InetAddress.getLocalHost()可以获得本机IP,通过InetAddress.getByName(“主机名称”)可以获取

Lym_2014的专栏 695

黑马程序员——网络编程概述

------- ---------------------android培训    java培训   期待与您交流! ------------------------ 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 网络编程步骤如下: 客户端(Client)是指网络编程中首先发起连接的程序,客户端一般实现程序界面和基本逻辑实现,在进行实际的客户端编程时,

u012668909的专栏 928
上一篇: 黑马程序员_IO中其他流对象
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值