JAVA进阶(07)网络编程

一 概述

1、TCP/IP网络通信协议

  • TCP/IP协议参考了OSI模型
  • TCP/IP 是一个协议族,共四层:应用层,传输层,互连网络层,网络接口层

   JAVA进阶(07)网络编程_第1张图片

2、数据封装与解封

  • 发送方数据处理的方式是从高层到底层,逐层进行数据封装
  • 接收方数据处理的方式是从底层到高层,逐层进行数据解封装
  • 对等层通信

3、URL

(1)综述

   1、URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址。

http://www.runoob.com/index.html?language=cn#j2se

   2、URL 解析:

  • 协议为(protocol):http
  • 主机为(host:port):www.runoob.com
  • 端口号为(port): 80, HTTP 协议默认的端口号为 80
  • 文件路径为(path):/index.html
  • 请求参数(query):language=cn
  • 定位位置(fragment):j2se,定位到网页中 id 属性为 j2se 的 HTML 元素位置 

(2)URL 类方法

   1、构造器

  • URL(String protocol, String host, int port, String file)
  • URL(String url)

   2、常用方法

  • String getPath()
  • String getQuery()

(3)URLConnections 类方法

   1、URL对象的openConnection() 返回一个 java.net.URLConnection,常用方法如下:

  • Object getContent()
  • String getContentType()
  • InputStream getInputStream()

4、socket

  • 网络应用程序位于应用层,TCP和UDP属于传输层协议,在应用层和传输层之间,使用套接Socket来进行分离
  • 套接字就像是传输层为应用层开的一个小口,应用程序通过这个小口向远程发送数据,或者接收远程发来的数据
  • Socket实际是传输层供给应用层的编程接口

 

二、TCP 和 UDP

1、TCP协议和UDP协议的联系和区别

(1)说明:

  • TCP协议和UDP协议是传输层的两种协议,Socket是传输层供给应用层的编程接口,所以Socket编程就分为TCP编程和 UDP编程两类

(2)总结:

  • TCP是面向连接的,传输数据安全稳定,效率相对较低
  • UDP是面向无连接的,传输数据不安全,效率较高

2、TCP

(1)tcp 建立连接三次握手

  • 客户端请求
  • 服务器确认响应
  • 客户端确认

3、UDP

  • 基于UDP协议的通信方式中,每个数据发送单元被统一封装成数据报包的方式,发送方将数据报包发送到网络中,数据报包在网络中去寻找它的目的地

 

三、java网络编程

  • 网络编程是指编写运行在多个计算机的程序,这些计算机通过网络连接起来,java中由java.net包来提供网络功能

1、ServerSocket 类的方法

(1)构造方法

  • ServerSocket(int port)     另外还有3个

(2)常用方法

  • int getLocalPort()       
  • Socket accept()
  • void setSoTimeout(int timeout)      通过指定超时值启用/禁用
  • void bind(SocketAddress host, int backlog)          将 ServerSocket 绑定到特定地址(IP 地址和端口号)

2、Socket 类的方法

  • Socket 类代表客户端和服务器都用来互相沟通的套接字,客户端要获取一个 Socket 对象通过实例化,而服务器获得一个 Socket 对象则通过 accept() 方法的返回值

(1)构造方法

  • Socket(String host, int port)----------创建一个流套接字并将其连接到指定主机上的指定端口号,还有几个构造方法

(2)常用方法

  • connect(SocketAddress host, int timeout)-------将此套接字连接到服务器,并指定一个超时值
  • int getPort()---------返回此套接字连接到的远程端口
  • SocketAddress getRemoteSocketAddress()--------返回此套接字连接的端点的地址,如果未连接则返回 null
  • OutputStream getOutputStream()--------返回此套接字的输出流

3、InetAddress 类的方法

(1)作用:封装计算机的IP地址和DNS(没有端口信息)

(2)特点:

  • 没有构造方法
  • 要得到对象,只能通过静态方法:getLocalHost()等

(3)常用方法

  • static InetAddress getByAddress(byte[] addr)-----在给定原始 IP 地址的情况下,返回 InetAddress 对象
  • static InetAddress getByAddress(String host, byte[] addr)-----根据提供的主机名和 IP 地址创建 InetAddress
  • static InetAddress getByName(String host)------在给定主机名的情况下确定主机的 IP 地址
  • String getHostAddress()-------返回 IP 地址字符串(以文本表现形式)
  • String getHostName()------获取此 IP 地址的主机名
  • static InetAddress getLocalHost()-------返回本地主机

(4)补充:

  • InetSocketAddress包含IP和端口信息,常用于Socket通信

  • 这个类可以直接创建实例

InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);

4、TCP通讯实现

(1)两台计算机使用套接字建立TCP连接步骤

  • 服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。

  • 服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。

  • 服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。

  • Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。

  • 在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。。

  • 客户端和服务器通过IO流进行双向通信。

(2)聊天室服务器:开两个线程,一发一收

(3)聊天室客户端:开两个线程,一发一收

5、UDP通讯实现

(1)DatagramSocket:用于发送或接收数据报包

  • 构造器:DatagramSocket() 、DatagramSocket(int port) 
  • 常用方法:send(DatagramPacket p) 、receive(DatagramPacket p)、close()

(2)DatagramPacket:数据容器(封包)的作用

   1、构造器:

  • DatagramPacket(byte[] buf, int length) :用来接收长度为 length 的数据包。
  • DatagramPacket(byte[] buf, int length, InetAddress address, int port) :用来将长度为 length 的包发送到指定主机指定端口

   2、常用方法:

  • getAddress() :获取对方计算机的IP地址。
  • getData() :获取发送或接收的数据。
  • setData(byte[] buf) :设置发送的数据。

(3)UDP通信编程基本步骤:

  • 创建客户端的DatagramSocket,创建时,定义客户端的监听端口。
  • 创建服务器端的DatagramSocket,创建时,定义服务器端的监听端口。
  • 在服务器端定义DatagramPacket对象,封装待发送的数据包。
  • 客户端将数据报包发送出去。
  • 服务器端接收数据报包。

(4)说明:

  • 通过字节数组流ByteArrayInputStream、ByteArrayOutputStream与数据流DataInputStream、DataOutputStream联合使用可以传递基本数据类型
  • 通过字节数组流ByteArrayInputStream、ByteArrayOutputStream与数据流ObjectInputStream、ObjectOutputStream联合使用可以传递对象

(5)代码参考

 

你可能感兴趣的:(Java基础,java)