java网络编程基础知识介绍
网络基础知识
1、OSI分层模型和TCP/IP分层模型的对应关系
这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍。
2、七层模型与协议的对应关系
网络层 ------------ IP(网络之间的互联协议)
传输层 ------------ TCP(传输控制协议)、UDP(用户数据报协议)
应用层 ------------ Telnet(Internet远程登录服务的标准协议和主要方式)、FTP(文本传输协议)、HTTP(超文本传送协议)
3、IP地址和端口号
1、ip地址用于唯一标示网络中的一个通信实体,这个通信实体可以是一台主机,可以是一台打印机,或者是路由器的某一个端口。而在基于IP协议网络中传输的数据包,必须使用IP 地址来进行标示。ip地址就像写一封信,必须指定收件人的地址一样。每个被传输的数据包中都包括了一个源IP和目标IP。
2、ip地址唯一标示了通信实体,但是一个通信实体可以有多个通信程序同时提供网络服务。这个时候就要通过端口来区分开具体的通信程序。一个通信实体上不能有两个通信程序 使用同一个端口号。
IP地址和端口号,就像一个出差去外地入住酒店一样,IP地址表示了酒店在具体位置,而端口号则表示了这个人在酒店的房间号。
4、TCP和UDP
1、TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。它能够提供两台计算机之间的可靠的数据流,HTTP、FTP、Telnet等应 用都需要这种可靠的通信通道。
2、UDP是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传送目的地,至于能够达到目的地,达到目的地的时 间以及内容的正确性都是不能保证的。
既然有了保证可靠传输的TCP协议,为什么还要非可靠传输的UDP协议呢?原因有两个:
1、可靠的传输是要付出代价的,对数据内容的正确性的检验必然会占用计算机处理时间和网络带宽。因此TCP的传输效率不如UDP高。
2、许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要求视频音频数据绝对正确,只要能够连贯就可以了。所以在这些场景下,使用UDP更合适些。
5、URL访问网上资源
1、URL对象代表统一资源定位器,是指向互联网“资源”的指针。它是用协议名、主机、端口和资源组成,即满足如下格式:
protocol://host:port/resourceName
http://www.crazyit.org/index.php
2、通过URL对象的一些方法可以访问该URL对应的资源:
String getFile():获取该URL的资源名
String getHost():获取主机名
String getPath():获取路径部分
int getPort():获取端口号
public static void main(String[] args) throws IOException { URL url = new URL("https://i.cnblogs.com/EditPosts.aspx?opt=1"); String file = url.getFile(); System.out.println(file); String host = url.getHost(); System.out.println(host); int port = url.getPort(); System.out.println(port); String query = url.getQuery(); System.out.println(query); String protocol = url.getProtocol(); System.out.println(protocol); }
执行结果:
1 /EditPosts.aspx?opt=1 2 i.cnblogs.com 3 -1 4 opt=1 5 https
上面展示了URL对象的常用方法,下面来看看URL最重要的两个方法:openConnection()、openStream()
public static void main(String[] args) throws IOException { URL url = new URL("http://www.baidu.com"); URLConnection connection = url.openConnection(); InputStream is = connection.getInputStream(); OutputStream os = new FileOutputStream("c:/data.txt"); byte[] buffer = new byte[1024]; int flag = 0; while (-1 != (flag = is.read(buffer, 0, buffer.length))) { os.write(buffer, 0, flag); } os.close(); is.close(); }
执行结果:
1、代码第4行openConnection()该方法用于返回URLConnection对象,表示到URL所引用的远程连接。
2、代码第5行getInputStream方法,用于返回从此打开的连接读取的输入流。
3、后面的代码就是我们已经很熟悉的从输入流中读到数据,再通过输出流写入文件。
4、执行的结果就是我们通过浏览器访问http://www.baidu.com,百度服务器返回的内容。
5、这里是文本文件,我们将后缀修改为html,然后用浏览器访问,这样看起来更直观:
6、InetAddress
JAVA提供了InetAddress类来代表IP地址。
public static void main(String[] args) throws IOException { InetAddress address = InetAddress.getLocalHost(); System.out.println(address); address = InetAddress.getByName("www.baidu.com"); System.out.println(address); }
执行结果:
WINDOWS-EC813QQ/192.168.88.1 www.baidu.com/115.239.211.112
总结
以上就是本文关于java网络编程基础知识介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅:Java网络编程之URL+URLconnection使用方法示例、Java网络编程基础篇之单向通信等,有什么问题可以随时留言,小编会及时回复大家的,感谢朋友们对本站的支持!
- ASP.NET MVC的Action Filter
- Android LayoutInflater详解
- 在Android中实现service动态更新UI界面
- VUE 入门基础(5)
- Android的UI设计与后台线程交互
- 更强悍的Silverlight: WCF RIA Services
- Java究竟该怎么学?文末有彩蛋!
- python-IDLE清屏和标记行数,其他推荐
- 从0到1:PostCSS 插件开发最佳实践
- VUE 入门基础(4)
- 实例演示Android异步加载图片
- 使用OData协议查询Windows日志
- Android之Notification介绍
- postcss-lazysprite: 一种生成CSS 雪碧图的懒惰姿势
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- JavaScript 测试系列实战(三):使用 Mock 模拟模块并处理组件交互
- 数据结构算法操作试题(C++/Python)——串联所有单词的子串
- TypeScript 实战算法系列(九):实现向量与矩阵
- TypeScript 实战算法系列(十):实现动态规划
- 数据结构算法操作试题(C++/Python)——下一个排列
- 最新Spring整合MyBatis详解教程
- 数据结构算法操作试题(C++/Python)——搜索插入位置
- 数据结构算法操作试题(C++/Python)——报数
- Java List.add()方法:向集合列表中添加对象
- Linux下查看NVIDIA的GPU使用情况
- 数据结构算法操作试题(C++/Python)——有效的数独
- Java List.addAll()方法:添加所有元素到列表中
- HDFS的Shell操作(开发重点)
- 数据结构算法操作试题(C++/Python)——字符串相乘
- Java基础知识笔记四(详细)