Java网络编程基础内容

IP地址

域名解析:

本机访问域名时,会从本地的DNS上解析数据(每个电脑都有),如果有,获取其对应的IP,通过IP访问服务器。如果本地没有,会去网络提供商的DNS找域名对应的IP,找到了就返回。

公网IP:连接互联网的IP

内网IP:局域网IP

1、网络通信的基本要素有哪些

2、IP地址是做什么的,具体有几种

3、如何查看本机ip,如何判断是否与对方互联

4、本地IP是多少

InetAddress

  • 万物皆对象:在java中IP对象就是InetAddress
InetAddress
public static InetAddress getLocalHost() 获取本机IP,会以一个InetAddress对象返回
public static InetAddress getByName(String host) 通过主机名获取IP对象
public String getHostName() 获取主机名
public String getHostAddress() 获取主机地址
public boolean isReachable(int timeout) 判断是否能在timeout时间内连通该IP

1、IP地址的代表类是谁

2、如何获取本机IP对象

3、如何判断与某IP对象是否互通

端口

  • 标记正在计算机设备商运行的应用程序,被规定为16为二进制,范围为0~65535

ip对应主机,端口对应的是主机上的应用。如:假如微信占用36端口,用微信给张三发消息,在网络传输过程中,通过ip确定张三的电脑,端口确定张三电脑上的应用,他才能收到。

端口分为:

周知端口(常用的:HTTP是80、FTP是21)、注册端口(分配给用户进程)、动态端口(分配不固定)

自己开发的程序一般选择注册端口

1、端口的作用是什么

2、一个设备中,能否出现两个端口相同的应用程序,为什么

通信协议

  • 网络上通信的设配,事先规定的连接规则以及传输数据的规则,称之为网络协议

开放网络互联标准:OSI网络参考模型

OSI、TCP/IP

传输层的两个通信协议

  • UDP:用户数据报协议
  • TCP:传输控制协议

UDP协议

  • 特点:无连接;不可靠通信;效率相对高
  • 场景:语音通话、视频直播
  • 不事先建立连接,数据按照包发,一包数据包含:自己的IP、程序端口、目的地IP、程序端口和数据等
  • 发送方不关对方是否在线,数据发送对视也不管,如果接收方受到数据也不返回确认,是不可靠的。

TCP协议

  • 特点:面向连接;可靠通信;效率相对低
  • 场景:网页、文件下载、支付
  • TCP的最终目的:要保证在不可靠的信道上实现可靠的传输
  • 实现可靠通信的方式:三次握手、进行数据确认、四次挥手

三次握手:发送连接请求;返回响应;再次发出确认,连接建立。例如开远程会议:能听到吗?可以听到。 好的那我们开始吧。

  • 第一次和第二次握手是为了确认服务器的连接

  • 第二次和第三次握手是为了确认客户端的连接

四次挥手:发出断开连接;返回响应:稍等;返回响应:确认断开;确认正式断开。如:我走了;等下;带着橘子路上吃;行,你先去吧

第二次和第三次是服务端的响应

第一次和第四次是客户端的请求

1、通信协议是什么

2、UDP协议、TCP协议的特点是什么?各自适用于什么场景?

UDP通信

例如抖音上的一个视频:道路两旁的两个人,一边是厨师,炒完菜将菜从盘子中扔过去,另一边是服务员,用盘子接收飞过来的菜。

  • 厨师就是客户端,扔菜的socket
  • 服务员是服务端,接菜的socket
  • 盘子就是就是DatagramPacket()

java提供了一个java.net.DatagramSocket实现UDP通信

public DatagramSocket() 创建客户端的socket对象,系统随机分配一个端口
public DatagramSocket(int port) 创建服务端的socket对象,并指定端口号
public void send(DatagramPacket dp) 发送数据包
public void receive(DatagramPacket p) 使用数据包接收数据,接收的数据在数据包的byte\[\]中
DatagramPacket 创建数据包
public DatagramPacket(byte\[\] buf, int length, InteAddress, int port) 参数1:要发或收的数据 参数2:要发或收的数据长度 参数3:服务端的IP地址 参数4:服务端的端口
public DatagramPacket(byte\[\] buf, int length) 参数1:要发或收的数据 参数2:要发或收的数据长度
public int getLength() 获取数据包,实际接收

1、UDP通信的对象是什么

2、如何获取和发送数据包

3、如何创建数据包对象

4、客户端和服务端先启动哪个

服务端

5、服务端运行时会在哪个方法中一直等待接收

receive方法

6、如何从接收的数据包中获取ip和port

数据包.getAddress().getHostAddress();

数据包.getPort();

7、如何关闭socket

socket.close();

TCP通信

1、tcp通信,客户端的代表类是谁

new socket(IP,端口)

2、如何使用socket管道进行收发数据

socket.getOutputStream();

socket.getInputStream();

3、tcp通信哪个包装流最好用

DataOutputStream、DataInputStream

1、服务端的代表类是谁

new ServerSocket(端口)

客户端和服务端都需要socket(插座)相当于两个渡口

客户端和服务端分别通过渡口收发数据

客户端(需要指定服务端ip和端口)

public Socket(String host,int port) 根据指定的ip、端口请求与服务器建立连接,连接通过就建立了socket(客户端的socket)

public OutputStream get OutputStream() 获取输出流对象

public InputStream get In putStream() 获取输入对象

服务端

public ServerSocket(int port) 为服务端注册端口

public Socket accept() 获取与客户端连接的socket(服务端的socket),服务端运行到这里的时候,会一直等待直到客户端连接上

public OutputStream get OutputStream() 获取输出流对象

public InputStream get In putStream() 获取输入对象

注意:

复制代码
1.   客户端可能使用了包装流发送数据,接收端如果想用包装流必须使用和客户端相同的包装流
2.   记得使用关闭方法关闭流和socket
3.   只要客户端和服务端连接成功后,客户端发数据服务端都会收到,如果客户端发送的速度很快,也不会丢失数据
4.   客户端如果挂了,服务端如果没关闭就会产生一个异常

•  1、TCP通信服务端用的类是谁
•  2、TCP通信服务端的开发步骤是什么

服务端一个线程只能对应一个客户端通信,main方法对应的是一个线程,所以服务端一个main方法只能与一个客户端通信。如果需要多方通信,就需要开启多线程。

仓库

https://gitee.com/gitee_q/network-programming.git

相关推荐
邪修king5 分钟前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
2301_7779983431 分钟前
ARP协议进阶:ARP缓存、RARP与ARP欺骗原理解析
linux·服务器·网络·网络协议·缓存
拆房老料32 分钟前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
张张123y1 小时前
后端第十四课:Agent 记忆系统(让 Agent 记住上下文和用户,跨会话不健忘)
java·大数据·人工智能·python·agent·记忆
m0_715674435 小时前
可视化易用·低误报率·跨区域部署:知源-AI数据分类分级系统在金融行业的落地实践
网络·安全·网络安全
阿里嘎多学长6 小时前
2026-10-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
dk_tjy6 小时前
AI驱动的自动化攻击背景下:企业端点安全体系的技术架构与建设路径
网络·人工智能·安全·自动化·终端安全管理·数据防泄漏
曹牧6 小时前
C#:空合并运算符
java·前端·数据库
布吉岛的石头6 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
golang学习记6 小时前
IDEA 2026年的玩法已经完全不同
java·ide·intellij-idea