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

相关推荐
Swift社区3 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht3 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht3 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20243 小时前
Swift 数组
开发语言
吾日三省吾码4 小时前
JVM 性能调优
java
麻瓜也要学魔法4 小时前
链路状态路由协议-OSPF
网络
stm 学习ing4 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
Estar.Lee4 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
傻啦嘿哟5 小时前
代理IP在后端开发中的应用与后端工程师的角色
网络·网络协议·tcp/ip
湫ccc5 小时前
《Python基础》之字符串格式化输出
开发语言·python