2.Java网络编程
2.1网络模型
OSI参考模型
TCP/IP参考模型
应用层:HTTP
传输层:TCP、UDP
网际层:IP
2.2网络通讯要素
1.IP地址
2.端口号(有效端口:0~65535其中0~1024系统使用或保留端口)
3.传输协议
IP地址:
用于标识网络中的设备
本地回环地址:127.0.0.1(网卡的默认IP地址)
主机名:localhost
java.net包中 InetAddress类是对IP地址进行相关操作的类。此类不可以NEW对象,可以通过相关方法返回一个InetAddress对象。
2.3 UDP协议与TCP协议的区别
UDP:将数据及源和目的封装成数据包中,不需要建立连接;
每个数据包的大小限制在64K内;
因无连接所以传输速度快;
但是这种无连接的协议不可靠。
TCP:需要建立连接,形成传输数据的通道;
在连接中进行大数据量传输;
通过三次握手完成连接,是可靠协议;
因必需建立连接所以效率会稍低。
Socket:
Socket就是为网络服务提供的一种机制;
通信的两端都有Socket;
网络通信其实就是Socket间的通信;
数据在两个Socket间通过IO传输。
2.4 UDP传输步骤
DatagramSocket与DatagramPacket
1.建立发送端,接收端
通过DatagramSocket创建对象
构造函数有很多根据需要进行创建对象
注意:建立接收端时需要通过构造函数创建对象设置端口。
2.建立数据包
通过DatagramPacket创建对象
构造函数有很多根据需要进行创建对象
注意:建立发送端时需要通过构造函数设置数据、IP和端口等信息。
3.调用Socket的发送/接收方法
发送:send(DatagramPacket p)发送数据报包。
接收:receive(DatagramPacket p)接收数据报包。
接收后可以使用数据包对象方法获取具体的内容:
InetAddressgetAddress() 返回某台机器的 IP地址,此数据报将要发往该机器或者是从该机器接收到的。
byte[]getData() 返回接收到的数据缓冲区。
int getLength()返回将要发送或接收到的数据的长度。
intgetPort() 返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。
4.关闭Socket
注:发送端与接收端是两个独立的运行程序
局域网段:192.168.1.0~192.168.1.255
其中192.168.1.0是代表网络段,192.168.1.255代表广播地址。
2.5 TCP传输步骤
Socket和ServerSocket
1,建立客户端和服务器端
客户端:通过Socket类创建对象,并利用构造函数传入服务端主机名(ip)和端口,
也可通过相关方法进行设置。
服务端:通过ServerSocket类创建对象,利用构造函数设置服务端的端口,也可
通过相关方法进行设置。
2,建立连接后,通过Socket中的IO流进行数据的传输
客户端:建立客户端对象后通过getOutputStream()和getInputStream()方法获取一个
IO流对象,通过write()和read()方法与服务端进行传输数据。
服务端:通过ServerSocket对象的accept方法获取连接过来的客户端(Socket)对象
(没有连接就会等,所以这个方法是堵塞的),通过获取到的客户端对象
来获取此对象的IO流(接收或发送)数据并对数据进行处理。(通过获
取到的客户端对象,就可以用其此对象的相关方法来获取客户端的相关信
息如IP等)
3,关闭Socket
注:客户端和服务器端是两个独立的应用程序。
注:客户端调用close方法后会自动向服务端发送结束标记(-1),服务端与此客户端的连接就会自动断开。
注:如果客户端和服务端都有阻塞式方法(如read方法)时很有可能会出现莫名的等待而显示不出数据,这是因为阻塞式方法没有读到结束标记。如读键盘输入的字符数据时结束标记是回车符,此时应在write()方法后加上结束标记newLine()同时刷新(flush)缓冲。
注:还有一些其它问题会导致客户端或服务端形成阻塞,比如客户端让服务端传一个文件,客户端传完文件后服务端会形成阻塞其实服务已经把数据都读取完了只是因为客户端没有向服务端发送结束标记,所以服务端会形成阻塞一直在那等,解决此办法可以在客户端自定义一个结束标记在开始传数据前传给服务端在客户端传完数据后再向服务端传送一次标记代表传完,服务端接收数据前接收到结束标记并把这个标记放在读取数据遍历中进行判断。另外一种方法也可以解决客户端或服务端阻塞的情况:
Socket类中的方法:shutdownOutput()此方法代表关闭客户端的输出流,也就是相当于给流中加入一个结束标记-1。
Socket类中还有另外一个方法shutdownInput()代表关闭输入流,相当于给流中加入一个结束标记-1。
2.6 URL类
String getAuthority()
获取此 URL的授权部分。
Object getContent()
获取此 URL的内容。
Object getContent(Class[] classes)
获取此 URL的内容。
int getDefaultPort()
获取与此 URL关联协议的默认端口号。
String getFile()
获取此 URL的文件名。
String getHost()
获取此 URL的主机名(如果适用)。
String getPath()
获取此 URL的路径部分。
int getPort()
获取此 URL的端口号。
String getProtocol()
获取此 URL的协议名称。
String getQuery()
获取此 URL的查询部分。
String getRef()
获取此 URL的锚点(也称为“引用”)。
String getUserInfo()
获取此 URL的 userInfo部分。
int hashCode()
创建一个适合哈希表索引的整数。
URLConnectionopenConnection()
返回一个 URLConnection对象,它表示到 URL所引用的远程对象的连接。
URLConnectionopenConnection(Proxy proxy)
与 openConnection()类似,所不同是连接通过指定的代理建立;不支持代理方式的协议处理程序将忽略该代理参数并建立正常的连接。
InputStream openStream()
打开到此 URL的连接并返回一个用于从该连接读入的 InputStream。
boolean sameFile(URL other)
比较两个 URL,不包括片段部分。
protectedvoid set(String protocol, String host, int port, String file, String ref)
设置 URL的字段。
protectedvoid set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref)
设置 URL的指定的 8个字段。
static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
设置应用程序的 URLStreamHandlerFactory。
String toExternalForm()
构造此URL 的字符串表示形式。
String toString()
构造此 URL的字符串表示形式。
URI toURI()
返回与此 URL等效的 URI。
URLConnection是一个抽象类它代表应用程序和 URL所指向的主机之间进行通信链接,可以通过URL类的openConnection()方法返回一个URLConnection对象,可以通过此对象方法获取主机的流等操作。方法如下:
InputStream getInputStream()返回从此打开的连接读取的输入流。
OutputStream getOutputStream()返回写入到此连接的输出流。
方法有很多不一一列出,具体查看AIP文档。
小知识点:
1,Socket类创建对象时有空参数的构造函数,那那么创建后可以通过自身的connect(SocketAddress endpoint)方法连接到服务器,其中参数SocketAddress类为抽象类但它有子类是InetSocketAddress类。
InetSocketAddress类和InetAddress类的区别:
InetAddress:是对IP地址进行相关操作的类。此类不可以NEW对象,可以通过相关方法返回一个InetAddress对象。
InetSocketAddress:是对IP地址+端口进行相关的操作,此类可以创建对象。
2,ServerSocket类的构造函数有种是ServerSocket(int port, int backlog) ,其中参数backlog代表队列的最大长度,意思就是说能同时连接服务器的最大客户端个数(同时在线数),
2.7域名解析
平时我们访问网站都用的主机名如:www.baidu.com,其实先用主机名本地的host文件(详细见下)找有没有与之对应的,如果没有再拿主机名到公网DNS服务器上找到与之对应的IP地址,然后再拿IP地址去访问百度的主机服务器。
本地主机的IP与主机名:
其实本地IP和localhost的映射关系就在本机上:c:\window\system32\drivers\ext\host
相关推荐
### Java语言编程—网络编程 #### 一、引言 在现代软件开发中,网络编程是不可或缺的一部分。Java作为一种广泛使用的编程语言,在网络编程领域有着非常成熟的支持与应用。本篇将详细介绍Java语言如何实现网络编程...
java编程之-java语言基础面试题JAVA编程相关教程,主要以java编程语言基础为主题,如java语法、OOP、AOP等基础技术栈适用于刚入门JAVA编程的初学者主要包括以下知识点:1、面向对象概念2、java语言特点3、JVM、JDK和...
少儿编程-少儿编程系统-少儿编程系统源码-少儿编程管理系统-少儿编程管理系统java代码-少儿编程系统设计与实现-基于ssm的少儿编程系统-基于Web的少儿编程系统设计与实现-少儿编程网站-少儿编程网站代码-少儿编程平台...
62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java...
Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-...
Java编程语言自诞生以来,因其独特的特性和强大的技术支撑,成为了计算机软件开发领域里应用广泛的编程语言。本文将详细探讨Java语言的主要特点,以及它在实际计算机软件开发中的应用。 首先,Java编程语言的特点是...
Java 语言 编程 - 多 线 程
少儿编程-少儿编程系统-少儿编程系统源码-少儿编程管理系统-少儿编程管理系统java代码-少儿编程系统设计与实现-基于ssm的少儿编程系统-基于Web的少儿编程系统设计与实现-少儿编程网站-少儿编程网站代码-少儿编程平台...
本文主要探讨了在计算机软件安全开发过程中,如何有效地融入JAVA编程语言的技术和方法。由于信息技术的飞速发展,计算机软件在人们的生活中扮演着越来越重要的角色,而软件的安全性成为了软件开发中极为重要的一环。...
Java Socket 编程是一种基于 Java 语言的网络编程技术,它允许开发者创建可以在网络上传输数据的应用程序。Socket 编程是网络编程的核心技术之一,它提供了一种方式来实现网络通信。 Java Socket 编程的优点 Java ...
Java编程语言的灵活性还体现在其多线程编程能力上,这让Java特别适合进行网络编程和大型应用程序的开发。这种特性让Java能够适应大数据时代的高并发处理和互联网的快速响应需求。 针对性强是Java编程语言的另一个...
总之,Java编程世界提供了全面的Java语言学习路径,从基础知识到实际应用,帮助学习者逐步掌握这一强大且广泛应用的编程语言。通过深入学习,不仅可以提升编程能力,也为未来从事软件开发、网络应用等领域的工作打下...
- **Go**:由Google开发的一种开源编程语言,特别适合网络服务和并发编程。 #### Java语言基础知识 Java是一种跨平台的面向对象编程语言,由Sun Microsystems公司于1995年发布。Java语言的设计理念之一是“一次...
基于计算机软件开发的 JAVA 编程语言也随之发展了起来, 成为了一个大型的编程语言,并且也被人们所广泛应用了起来,人们也越来越喜欢使用这门编程语言。它被使用于计算机软件的开发工程 上。我们这篇文章主要论述了...
编程训练-编程训练系统-编程训练系统源码-编程训练管理系统-编程训练管理系统java代码-编程训练系统设计与实现-基于springboot的编程训练系统-基于Web的编程训练系统设计与实现-编程训练网站-编程训练网站代码-编程...