当前位置:网站首页 > Java教程 > 正文

java网络编程案例教程笔记



本文整理了学习Java网络通信编程的笔记,并分析了若干程序实例,以巩固学习成果。

1.1.1 基本概念

  • 局域网(LAN)、广域网(WAN)
  • IP协议,IP地址(IPv4,4个字节表示)
  • TCP协议(传输控制协议):类似拨打电话,固接连线,可靠性高,有顺序
  • UDP协议(数据用户报协议):类似发送信件,无连接通信,可靠性低,不保证顺序
  • 端口(port):假想的连接装置,计算机与网络的物理连接,为整数
  • 套接字(Socket):假想的连接装置,连接程序与端口

1.1.2 网络通信的要素

  • 通信双方地址:IP、端口号
  • 网络通信协议:TCP/IP协议

1.2.1 类

与IP地址相关的类,注意该类会抛异常

  • IP地址:
    • 本机(127.0.0.1)
    • IPv4(4个字节组成,42亿),IPv6(128位,8个无符16进制整数)
    • 公网(互联网),私网(局域网),ABCD类地址
  • 无构造器,不可被,只可被自己的方法返回
  • 常用方法:
    • 获取与Host对应的对象
    • 获取对象所包含的IP地址,返回String
    • 获取IP主机名,返回String
    • 获取本地主机的对象

1.2.2 类

服务器套接字,等待网络请求,注意该类会抛异常

  • 端口:
    • 0~65535
    • 不同的进程用不同的端口号,类似于门牌
    • 端口分类:
      • 公有端口0~1023(80、443、21、23)
      • 程序注册端口1024~49151(8080、3306、1521)
      • 动态(私有)端口49152~65535
  • 类:与类似,加入了端口,可以,传入String地址和int端口,有等方法
  • 用于等待网络请求,构造方法:
    • 非绑定服务器套接字
    • 绑定特定端口
    • 指定本机端口、指定的
    • 指定端口、侦听和绑定到的本地IP地址
  • 的常用方法:
    • 等待客户机连接,若连接返回一个Socket套接字
    • 判断绑定状态
    • 返回本地地址的
    • 返回关闭状态
    • 关闭服务器套接字
    • 绑定到特定地址(IP和端口)
    • 获取等待端口

1.2.3 TCP网络程序

  • 通信协议:速率、传输码率、代码结构、传输控制等
    • TCP/IP协议:协议簇,最出名的是TCP协议和IP协议
    • TCP:连接、稳定,三次握手四次挥手,客户端服务端架构,传输完成释放连接,效率低
    • UDP:不连接、不稳定,客户端服务端无明确界限,效率高
  • 参见第2章的实例

1.2.4 Tomcat基础

  • Tomcat是一个服务端,客户端通过浏览器进入
  • 一般使用8080端口

1.4.1 UDP通信

  • 基本模式:
    • 数据打包(数据包),发往目的地
    • 接收数据包并查看
  • 发送数据包步骤:
    • 创建数据报套接字()
    • 创建发送的数据包()
    • 发送数据包()
  • 接收数据包步骤:
    • 创建数据报套接字并绑定到端口()
    • 创建字节数组接收数据包()
    • 接收UDP包()

1.4.2 类

  • 表示数据包
  • 构造方法:
    • 指定数据包的内存空间和大小
    • 指定数据包的目标地址和端口

1.4.3 类

  • 表示发送和接收数据包的数据报套接字
  • 构造方法:
    • 绑定到本地主机任何可用端口
    • 绑定到本地主机指定端口
    • 绑定到指定的本地地址

1.4.4 UDP网络程序

  • 服务端、客户端没有明确的界限
  • 参见第3章的实例

统一资源定位器,通过地址定位互联网上的资源

  • URL的形式:
  • 构造方法:传入字符串,
  • 常用方法:
    • 获取协议名
    • 获取主机IP
    • 获取端口
    • 获取路径
    • 获取完整路径
    • 获取查询名
  • 参见第4章的实例

接收器()

 

发送器()

 

说明:

  1. 服务端和客户端都需要有套接字,分别是和,并且绑定到统一端口。服务端还有一个,是连接端口的返回结果。
  2. 注意输入流和输出流的使用,客户端使用输出流,通过套接字输出;服务端使用输入流,通过套接字输入,而这股输入流需要输出的话,还需要一个输出流。

先启动,再启动,观察到输出:

 

服务端()

 

客户端()

 

说明:

  1. 服务端将获取客户端的方法放在无限循环中,以便无限接收客户端的信息。
  2. 根据屏幕提示的信息,确定客户端是何时连接上服务端的。

先启动,再启动,在窗体输入文字,观察到窗体变化与输出:

 

服务端()

 

客户端()

 

说明:

  1. 示例中涉及到的输入输出流分别有(以输入流为例):(接收套接字流)、(用于文件与系统间的传输流)、(管道)、(用于处理服务端的回传字符)。
  2. 注意客户端第15行的,若不写这一行,即使客户端已写入完毕(并开始进行输入流的等待),服务端仍在继续读取(因为服务端第13行的,读取的字节数已为0,因此循环无法退出,处于读取0字节写入0字节的状态),因此要单向关闭客户端的套接字输出流,保证服务端结束读取。

先启动,再启动,观察到文件生成,以及输出:

 

发送器()

 

接收器()

 

说明:

  1. 发送器和接收器都有数据报套接字和数据包,但使用方式不同。
    • 发送器的不用绑定端口,因为它只用方法,无需绑定发送者的端口;接收器的需要绑定端口,因为它用方法需要明确自己的地址。
    • 发送器的需要绑定发送地址,因为它已有内容并打包好,需要向特定地址传递;接收器的不用绑定地址,因为它是一个空的容器,只起接收载体作用。
  2. 接收器第10行,不能用代替,数据包大小与数据字节数组的大小是不同的。

先启动,观察到程序开始等待,再启动,观察到输出:

 

聊天发送端线程()

 

聊天接收端线程()

 

聊天者A()

 

聊天者B()

 

说明:每个聊天者有两个线程,以及两个所需端口。A向的9999端口发信息,同时接收发送到8888端口名为B发来的信息;B向的8888端口发信息,同时接收发送到9999端口名为A发来的信息。

分别启动和,并输入文字,观察到两个程序分别输出:

 
 

广播()

 

收音机()

 

说明:

  1. 发出广播和接收广播的地址必须位于同一个组内,地址范围是224.0.0.0~224.255.255.255,该地址不代表某个特定主机的位置。
  2. 加入同一个组的主机可以在某个端口广播信息,也可以在某个端口接收信息。

启动,观察到其开始输出;启动并点击开始接收按钮,观察到其开始接收广播信息:

 

 

观察到文件的生成。

使用输入流、输出流时以下这段代码的原理:

 
  • 是一个字节数组,长度为1024,类似于一个缓冲区。
  • ,这一步从输入流读取大小的字节(即1024),把这些字节赋给,并返回读取的字节数。
  • 把读取的字节数赋值给,然后对进行判断。
  • 把数组的0到位置的字节写入输出流。
  • 每次循环,就被重新赋值一次,因此文件大小与的长度1024是没有关系的。
  • 读取到输入流末尾时,方法返回-1,循环结束。
  • 注意:缓冲区的大小不应太小,否则会涉及到编码问题,部分字节被强行拆分到两个缓冲区时可能会出现乱码。

  • 上一篇: java划拳教程
  • 下一篇: java383集教程
  • 版权声明


    相关文章:

  • java划拳教程2025-01-03 11:34:04
  • java入门初级教程2025-01-03 11:34:04
  • 面向对象编程c 和java比较教程2025-01-03 11:34:04
  • 390集java教程2025-01-03 11:34:04
  • 苹果手机java教程2025-01-03 11:34:04
  • java383集教程2025-01-03 11:34:04
  • java007教程2025-01-03 11:34:04
  • java内部编程教程2025-01-03 11:34:04
  • java的jvm教程2025-01-03 11:34:04
  • java语句设计教程2025-01-03 11:34:04