【JavaSE】十四、网络编程

本文介绍了网络通信的基础知识,包括IP地址的分类(IPv4、IPv6)、端口号的用途及分类,以及TCP和UDP两种主要的网络协议。详细阐述了TCP的三次握手和可靠性,UDP的无连接特性及其速度优势。同时,展示了TCP和UDP的Java网络编程示例,以及URL在网络资源定位中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通信要素一:IP和端口号

IP地址:InetAddress

  • 唯一的标识Internet上的计算机(通信实体)
  • 本地回环地址(hostAddress):127.0.0.1 主机名(hostname):localhost
  • 分类方式一:IPV4和IPV6
    • IPV4:4个字节组成,4个0-255。大概42亿,2011年初已用尽。以点分十进制表示,如:192.168.0.1
    • IPV6:16个字节表示(128位),写成8个无符号整数,每个整数用四个十六进制位表示,数之间用冒号分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
  • 分类方式二:
    • 公网地址(万维网使用)

    • 私有地址(局域网使用)

      192.168开头就是私有地址,范围在192.168.0.0~192.168.255.255间。专门为组织机内部使用

域名:www.baidu.com

本地回路地址:127.0.0.1【对应localhost】

  • 如何实例化InetAddress
    • getByName(String host)
    • getLocalHost()
    • 常用方法:getHostName();getHostAddress()

端口号

标识计算机上运行的进程

  • 不同进程有不同端口号
  • 被规定为一个16位的整数0~65535
  • 端口分类
    • 公认端口:0~1023

      被预先定义的服务通信占用(如:HTTP占用80,FTP占用21,Telnet占用23

    • 注册端口:1024~49151

      分配给用户进程或应用程序(如:Tomcat占用8080,MySQL占用3306,Oracle占用1521)

    • 动态/私有端口:49152~65535

  • 端口号与IP地址组合得出一个网络套接字:Socket

通信要素二:网络协议

对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准

通信协议分层思想

在制定协议时,把复杂成分分解成简单成分,再将其复合起来。最常见的是层次方式。同层可通信、上一层可以调用下一层,而与再下一层不发生关系。各层互不影响,利于系统的开发和扩展

在这里插入图片描述

传输层协议中有两个非常重要的协议:

传输控制协议TCP(Transmission control Protocol)

用户数据报协议UDP(User Datagram Protocol)

IP(Internet Protocol)协议是网络层的主要协议,支持网间的数据通信

TCP协议

  • 使用TCP协议前,须先建立TCP连接,形成传输数据通道
  • 传输前,采用“三次握手”方式,点对点通信,是可靠的
  • TCP协议进行通信的两个应用进程:客户端、服务的
  • 在连接中可进行大数据量的传输
  • 传输完毕,需释放已建立的连接,效率低

UDP协议

  • 将数据、源、目的封装成数据包,不需要建立连接
  • 每个数据报的大小限制在64K内
  • 发送不管对方是否准备好,接收方收到也不确认,是不可靠的
  • 可以广播发送
  • 发送数据结束无需释放资源,开销小,速度快

TCP网络编程

客户端发送文件给服务端,服务端将文件保存到本地

服务器端server:

  • 自定义
  • Tomcat服务器
ServerSocket ss=new ServerSocket(9090);
Socket socket=ss.accept();
InputStream is=socket.getInputStream();
FileOutputStream fos=new FileOutputStream(new File("2.jpg"));
byte[] buffer=new byte[1024];
int len;
while ((len=is.read(buffer))!=-1){
	fos.write(buffer,0,len);
}
//向客户端发出回复
OutputStream os=socket.getOutputStream();
os.write("收到文件".getBytes());
os.close();
fos.close();
is.close();
socket.close();
ss.close();

客户端client:

  • 自定义
  • 浏览器
Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9090);
OutputStream os=socket.getOutputStream();
FileInputStream fis=new FileInputStream(new File("1.jpg"));
byte[] buffer=new byte[1024];
int len;
while ((len=fis.read(buffer))!=-1){
	os.write(buffer,0,len);
}
//关闭数据输出
socket.shutdownOutput();
//接收服务端回复
InputStream is=socket.getInputStream();
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte[] buffer1=new byte[20];
int len1;
while ((len1=is.read(buffer1))!=-1){
	baos.write(buffer1,0,len1);
}
System.out.println(baos.toString());
baos.close();
is.close();
fis.close();
os.close();
socket.close();

UDP网络编程

发送端sender:

DatagramSocket socket=new DatagramSocket();
String str=new String("我是UDP方式发送的消息");
byte[] data=str.getBytes();
InetAddress inet=InetAddress.getByName("127.0.0.1");
DatagramPacket packet=new DatagramPacket(data,0,data.length,inet,9090);
socket.send(packet);
socket.close();

接收端receiver:

DatagramSocket socket=new DatagramSocket(9090);
byte[] data=new byte[1024];
DatagramPacket packet=new DatagramPacket(data,0,data.length);
socket.receive(packet);
System.out.println(new String(packet.getData(),0,packet.getLength()));
socket.close();

URL网络编程

URL(Uniform Resource Locator):统一资源定位符,表示Internet上某一资源的地址

  • 是一种具体的URI,即URL可以用来标识一个资源,还指明了如何locate这个资源

  • 通过URL可以访问Internet上的各种网络资源,比如最常见的www,ftp站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源

  • 基本由5个部分组成

    <传输协议>://<主机名>:<端口号>/<文件名>#<片段名>?参数列表

    如:http://192.168.1.100:8080/helloworld/index.jsp#a?username=X&password=123456

    #片段名:即锚点,例如看小说,直接定位到章节

    ?参数列表方式:参数名=参数值&参数名=参数值……

URL常用方法:

  • public String getProtocol():获取该URL的协议名
  • public String getHostl():获取该URL的主机名
  • public String getPort():获取该URL的端口名
  • public String getPath():获取该URL的文件路径
  • public String getFile():获取该URL的文件名
  • public String getQuery():获取该URL的查询名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值