仿微信的网络聊天室项目开发【完整源码讲解】

目录

总体开发思路

服务器端

服务器界面设计

建立TCP服务器端通信

建立服务器消息发送输出流

建立服务器消息接收输入流

建立服务器实时消息通信线程

设置服务器通信自由断开

客户端

客户端界面设计

建立TCP客户端通信

建立客户端消息发出输出流

建立客户端消息接收输入流

建立客户端实时通信线程

设置客户端通信自由断开

获取当前时间函数

文本框内容显示不同效果

判断一个字符串是否为IP地址


Helllo!你好哇,我是灰小猿!一个超会写Bug的程序猿!

最近在进行网络通信的学习时,突发奇想就想模仿微信做一个简单的网络聊天室,所以今天在这里记录一下开发过程。

先看一波效果图:

包括消息输入框和消息接收框两大块,两个用户(客户端和服务器)之间可以实时的进行消息的通信。

 

总体开发思路

网络聊天室的开发是基于TCP/IP协议而建立,通过指定的IP地址和端口号进行实时的通信,关于使用TCP/IP协议通信的基础学习,可以看我的这篇博客“Java利用TCP协议实现客户端与服务器通信”。这上面对Java语言建立TCP协议及套接字的使用做了较为详细的讲解。

首先记录一下聊天室项目开发的总体思路:

  1. 设计并完成客户端和服务器的交互界面

  2. 建立各个按钮的内部监听类或监听函数

  3. 客户端和服务器基于TCP/IP协议建立通信

  4. 分别编写客户端和服务器通信线程,对双方消息的发送和接收进行监听

  5. 编写通信断开函数,实现网络通信的可断开

好了,以上五个步骤是主要的开发过程,其中还有很多需要编写和注意的小细节,接下来分享一下网络聊天室项目的详细开发思路,同时附上对应的源码:

 

服务器端

服务器界面设计

服务器端的界面设计上,主要包括的元素是:连接、断开、发送按钮、消息输入框、消息接收框、端口号输入框等,根据PC端微信的界面原理,可以根据自己的想法简单设计,我设计的服务器端的界面如下:

之后根据设计依次要完成的是:

 

建立TCP服务器端通信

根据TCP协议通信原理,在服务器端需要基于端口号建立通信协议,之后在客户端以相同的方式建立客户端套接字来实现通信连接。

在服务器端,按照实际需要,网络通信应该是在用户输入通信端口号并且点击了连接按钮之后,再进行服务器端通信的,因此该段代码应该写在连接按钮的监听函数中去,在这里是建立了连接按钮内部监听类:

//设置连接按钮内部监听类
class ConnectJBClass implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {//判断端口输入框是否为空if (portText.getText().equals("")) {JOptionPane.showMessageDialog(null, "请输入连接的端口号!", "提示", JOptionPane.ERROR_MESSAGE);}else {	//如果输入的端口不是整型,则异常抛出try {port = Integer.parseInt(portText.getText());	//获取到用户输入的端口号isCorrectPort = true;	//如果用户输入的端口号正确,就设置为true} catch (Exception e2) {// TODO: handle exceptionJOptionPane.showMessageDialog(null, "请输入正确的端口号!", "提示", JOptionPane.ERROR_MESSAGE);}//如果输入了正确格式的端口号则继续,否则不执行if (isCorrectPort) {try {server = new ServerSocket(port);	//建立服务器,端口为用户输入portstateJL.setText("正在等待连接...");System.out.println("端口号是“" + Integer.toString(port) + "”");client = server.accept();	//调用服务器函数对客户端进行连接stateJL.setText("IP:" + client.getInetAddress());isConnect = true;	//建立通信threadConnect.start();//连接成功后启动通信线程} catch (IOException e1) {JOptionPane.showMessageDialog(null, "客户端已断开!", "提示", JOptionPane.ERROR_MESSAGE);							}}			}}}

 

建立服务器消息发送输出流

在通信建立完成之后,就是实现双方的信息交互了,首先我们应该完成客户端到服务器或服务器到客户端的单向通信,之后再进行双向通信,在这里我们先完成服务器端向客户端发送,客户端向服务器通信使用的是同样的方法,该代码同样是在发送按钮的内部监听类中完成:

//设置发送按钮内部监听类
class ShendJBClass implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {try {			String putText = sendWindow.getText();	//获取到服务器用户输入的文本		String putTime = getTime();setInfoWindosFont(putTime, Color.blue, false, 15);setInfoWindosFont(putText, Color.black, false, 20);sendWindow.setText("");		//发送完毕后将发送框清空OutputStream put = client.getOutputStream();	//定义发送给客户端的输出流put.write(putText.getBytes());	//将文本转为字节发送} catch (IOException e1) {// TODO Auto-generated catch block}		}	
}

 

建立服务器消息接收输入流

这一步要完成的是对客户端发送过来的消息进行接收,在这里根据TCP/IP协议,要建立消息输入流对象,从而实现对消息的接收:客户端接收是以同样的方法,具体代码如下:

try {InputStream iStream = client.getInputStream();	//获取到客户端的输入流byte [] b = new byte[1024];int len = iStream.read(b);	//以二进制的形式对数据进行读取String data = new String(b,0,len);	//接收到的内容String infoTime = getTime();	//消息发送的时间setInfoWindosFont(infoTime, Color.red, false, 15);setInfoWindosFont(data, Color.black, false, 20);/*使滚动条置于文本框最下端*/												infoWindow.setSelectionStart(infoWindow.getText().length());JScrollBar jSBInfo = jScrollPaneInfo.getVerticalScrollBar();jSBInfo.setValue(jSBInfo.getMaximum());
} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();
}

 

建立服务器实时消息通信线程

以上我们基本就完成了客户端和服务器的双向通信,也就是说我们的客户端可以接收到来自服务器的消息,服务器同时也可以接收到来自客户端的消息,但是需要注意的是,以上我们建立的通信是单次的,也就是说只能实现一次发送和接收,那么很显然这样是不可以的,实际开发的聊天室应该是可以在通信畅通的前提下一直通信的才对,所以我们接下来就是要解决这样的问题。

实现客户端和服务器实时通信的方法其实很简单,我们只需要对客户端或者服务器发送的消息实时的监听,只要一旦监听到有消息的发送,那么我们就将接收到的消息在对应的消息框显示出来,所以这里要使用线程的方法,具体代码如下:

//通信线程
threadConnect = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile (true) {//如果当前已经建立连接if (isConnect) {try {InputStream iStream = client.getInputStream();	//获取到客户端的输入流byte [] b = new byte[1024];int len = iStream.read(b);	//以二进制的形式对数据进行读取String data = new String(b,0,len);	//接收到的内容String infoTime = getTime();	//消息发送的时间setInfoWindosFont(infoTime, Color.red, false, 15);setInfoWindosFont(data, Color.black, false, 20);/*使滚动条置于文本框最下端*/																							        infoWindow.setSelectionStart(infoWindow.getText().length());JScrollBar jSBInfo =  jScrollPaneInfo.getVerticalScrollBar();jSBInfo.setValue(jSBInfo.getMaximum());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {stateJL.setText("服务器未连接!");break;}}}
});

 

设置服务器通信自由断开

在以上完成之后,我们的聊天室就可以实现双向的实时通信了,但是这也仅仅是通信,就像我们在使用微信的时候,还有对方下线的情况出现对吧,所以在这里我们同样是建立了一个客户端和服务器的断开设置。在点击了断开按钮之后,我们的客户端和服务器就无法通信了,其实很简单只需要将客户端和服务器的套接字close掉就可以了,具体代码如下:

//设置断开连接按钮内部监听类
class CloseConnectJBClass implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubisConnect = false;	//服务器断开try {server.close();	//中止服务器端运行} catch (IOException e1) {// TODO Auto-generated catch blockJOptionPane.showMessageDialog(null, "服务器端已断开!", "提示", JOptionPane.ERROR_MESSAGE);					}//JOptionPane.showMessageDialog(null, "服务器端已断开!", "提示", JOptionPane.ERROR_MESSAGE);	}}

 

客户端

在客户端我们同样需要按照和服务器端一样的思路进行编写,

客户端界面设计

首先是界面的设计,效果如下:

 

建立TCP客户端通信

与服务器端稍微有所不同的是,客户端的通信是基于IP地址和端口号的,也就是说在建立客户端通信时,我们需要输入通信的IP地址还有和服务器端一样的端口号,这样才能建立双方的通信。建立客户端通信是在客户端的连接按钮中实现的,这里建立客户端连接按钮内部监听类:

//为连接按钮添加内部事件监听类
class ConnectJBClass implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {//判断端口输入框和IP输入框是否为空if (portText.getText().equals("端口号")||ipTextArea.getText().equals("IP地址")) {JOptionPane.showMessageDialog(null, "请输入完整的IP和端口号!", "提示", JOptionPane.ERROR_MESSAGE);}else {//对用户输入的格式进行判断try {ipClient = ipTextArea.getText();	//获取到用户输入的IP//如果IP正确if (isCorrectIp2(ipClient)) {isCorrectIp = true;}else {JOptionPane.showMessageDialog(null, "请输入正确格式的IP!", "提示", JOptionPane.ERROR_MESSAGE);}port = Integer.parseInt( portText.getText());	//获取到用户输入的端口号isCorrectPort = true;//System.out.println("端口正确!");} catch (Exception e2) {// TODO: handle exceptionJOptionPane.showMessageDialog(null, "请输入正确格式的端口号!", "提示", JOptionPane.ERROR_MESSAGE);}//如果用户输入的IP和端口格式都正确if (isCorrectIp&&isCorrectPort) {JOptionPane.showMessageDialog(null, "输入完成,正在连接......\nIP:" + ipClient, "提示", JOptionPane.ERROR_MESSAGE);/*******判断正确后将判断变量赋初值,以便下次输入判断********/isCorrectIp = false;isCorrectPort = false;try {client = new Socket(ipClient,port);		//建立客户端stateJL.setText("客户端连接成功!");isConnect = true;	//已经建立连接threadConnect.start();//启动通信线程} catch (IOException e1) {// TODO Auto-generated catch blockJOptionPane.showMessageDialog(null, "客户端连接失败!", "提示", JOptionPane.ERROR_MESSAGE);}}}}}

 

建立客户端消息发出输出流

//设置发送按钮内部监听类
class ShendJBClass implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {try {				String putText = sendWindow.getText();	//获取到客户端用户输入的文本				String putTime = getTime();setInfoWindosFont(putTime, Color.blue, false, 15);setInfoWindosFont(putText, Color.black, false, 20);sendWindow.setText("");		//发送完毕后将发送框清空OutputStream put = client.getOutputStream();	//定义发送给服务器的输出流put.write(putText.getBytes());	//将文本转为字节发送} catch (IOException e1) {}		}	
}

 

建立客户端消息接收输入流

try {InputStream input = client.getInputStream();byte [] infoByte = new byte[1024];int len = input.read(infoByte);String infoTime = getTime();	//获取当前时间String data = new String(infoByte,0,len);	//获取接收的消息String oldText = infoWindow.getText();	//获取到之前文本框的内容String atText = oldText + "\n" + infoTime + "\n" + data;	//将要在文本框显示的内容System.out.println(atText);setInfoWindosFont(infoTime, Color.RED, false, 15);setInfoWindosFont(data, Color.black, false, 20);//infoWindow.setText(atText);/*使滚动条置于文本框最下端*/	infoWindow.setSelectionStart(infoWindow.getText().length());	JScrollBar jSBInfo = jScrollPaneInfo.getVerticalScrollBar();jSBInfo.setValue(jSBInfo.getMaximum());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();
}

 

建立客户端实时通信线程

//通信线程
threadConnect = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile (true) {		if (isConnect) {	stateJL.setText("正在通信!");try {InputStream input = client.getInputStream();byte [] infoByte = new byte[1024];int len = input.read(infoByte);String infoTime = getTime();	//获取当前时间String data = new String(infoByte,0,len);	//获取接收的消息String oldText = infoWindow.getText();	//获取到之前文本框的内容String atText = oldText + "\n" + infoTime + "\n" + data;	//将要在文本框显示的内容System.out.println(atText);setInfoWindosFont(infoTime, Color.RED, false, 15);setInfoWindosFont(data, Color.black, false, 20);//infoWindow.setText(atText);/*使滚动条置于文本框最下端*/	infoWindow.setSelectionStart(infoWindow.getText().length());JScrollBar jSBInfo = jScrollPaneInfo.getVerticalScrollBar();jSBInfo.setValue(jSBInfo.getMaximum());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else {stateJL.setText("客户端已断开......");break;}}}
});

 

设置客户端通信自由断开

//设置断开连接按钮内部监听类
class CloseConnectJBClass implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {isConnect = false;	//服务器断开//JOptionPane.showMessageDialog(null, "客户器端已断开!", "提示", JOptionPane.ERROR_MESSAGE);	try {client.close();	//中止客户端运行} catch (IOException e1) {JOptionPane.showMessageDialog(null, "客户器端已断开!", "提示", JOptionPane.ERROR_MESSAGE);				}
}
}

 

在客户端和服务器都完成之后,这样我们的服务器和客户端就实现了可连接可断开的双向实时通信,

但是在进行实际开发时,还有很多需要注意的小细节,大灰狼在这里一一列出。

 

获取当前时间函数

为了可以实时的观察到我们发送和接收的消息的时间,在这里需要有一个获取当前时间的函数。代码如下:

//定义获取当前时间的方法
public String getTime()
{Date date = new Date();SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");SimpleDateFormat monthFormat = new SimpleDateFormat("MM");SimpleDateFormat dayFormat = new SimpleDateFormat("dd");SimpleDateFormat hourFormat = new SimpleDateFormat("HH");SimpleDateFormat minuteFormat = new SimpleDateFormat("mm");SimpleDateFormat secondFormat = new SimpleDateFormat("ss");String year = yearFormat.format(date);String month = monthFormat.format(date);String day = dayFormat.format(date);String hour = hourFormat.format(date);String minute = minuteFormat.format(date);String second = secondFormat.format(date);return year + ":" + month + ":" + day + ":" + hour + ":" + minute + ":" + second;}

 

文本框内容显示不同效果

从上面的效果展示中我们可以看到在文本框中我们显示的时间以及客户端服务器发送的消息显示的字体颜色及属性是不一样的,

我们知道,在实际应用中文本框是纯文本的形式,是无法实现上述效果的,因此对于消息接收框,我们使用的是JTextPane文本域,并且在其中设置我们想要显示的字体样式,关于如何显示的具体教程可以看我的这篇文章“Java文本框内文字显示不同颜色、字号等属性”,函数代码如下:

//设置接收框文本字体属性
public void setInfoWindosFont(String str, Color col,boolean bold,int fontSize) {SimpleAttributeSet attrSet = new SimpleAttributeSet();StyleConstants.setForeground(attrSet, col);//设置颜色if (bold) {StyleConstants.setBold(attrSet, bold);//设置粗体}StyleConstants.setFontSize(attrSet, fontSize);//设置字号/*********infoWindow为JTextPane文本域的名称*****************/Document doc = infoWindow.getDocument();	str = "\n" + str;try {doc.insertString(doc.getLength(), str, attrSet);} catch (BadLocationException e) {// TODO Auto-generated catch block//e.printStackTrace();JOptionPane.showMessageDialog(null, "字体设置错误!", "提示", JOptionPane.ERROR_MESSAGE);	}
}

 

判断一个字符串是否为IP地址

我们在编写客户端时,需要输入网络通信的IP地址,那么我们就需要判断用户输入的IP地址是否正确,以防程序出错,因此在这里需要对输入的字符串(IP地址)进行判断,关于判断一个字符串是否为IP地址的详细讲解可以看这篇博客“算法-判断字符串是否为IP地址”,这里我列出一个在程序中使用到的判断方法,该方法基于正则表达式判断,代码如下:

//利用正则表达式判断字符是否为IP
public boolean isCorrectIp2(String ipString) {String ipRegex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";	//IP地址的正则表达式//如果前三项判断都满足,就判断每段数字是否都位于0-255之间if (ipString.matches(ipRegex)) {String[] ipArray = ipString.split("\\.");for (int i = 0; i < ipArray.length; i++) {int number = Integer.parseInt(ipArray[i]);//4.判断每段数字是否都在0-255之间if (number <0||number>255) {return false;}}return true;}else {return false;	//如果与正则表达式不匹配,则返回false}	
}

好了,关于网络聊天室的开发就记录到这里,

完整的源码可以在以下链接获取:

点击获取完整源码     提取码:2heo

觉得不错记得点赞关注哟!

大灰狼陪你一起进步!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62844.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你React Native接入聊天IM即时通讯功能-源码分享

本文介绍如何基于React Native使用 IM即时通讯SDK- ZIM SDK 快速实现同腾讯微信消息收发聊天交友功能。实现React Native混合移动框架开发多端应用&#xff0c;节省开发成本。 1 IM即时通讯SDK接入方案介绍 ZIM SDK IM即时通讯SDK提供了如下接入方案&#xff1a; 在此方案中…

(附源码)vue3.0+.NET6实现聊天室(实时聊天SignalR)

参考文章 搭建文章 gitte源码 在线体验 可以注册两个号来测试 演示图&#xff1a; 一. 整体介绍 介绍SignalR一种通讯模型Hub(中心模型&#xff0c;或者叫集线器模型)&#xff0c;调用这个模型写好的方法&#xff0c;去发送消息。 内容有&#xff1a; ①&#xff1a;Hub模型…

A股全市场股票历史行情Level2快照高频数据

A股全市场股票Level2快照高频数据(2010年开始) 快照行情又称切片(snapshot)行情&#xff0c;如其名&#xff0c;是对tick行情数据的某一个时刻的切片数据。例如现在常见的期货500ms一笔的行情&#xff0c;就是每500ms&#xff0c;在这时间段内的最高价、最低价、成交量等汇总成…

数据分析之数据可视化

数据可视化主要借助于图形化手段&#xff0c;清晰有效地传达与沟通信息。通过图表使冗长的数据表达更加形象化&#xff0c;可以把问题的重点有效传递给观者。 一 看懂不同类型的图表 在实现数据可视化之前&#xff0c;我们首先要了解有哪些图表类型&#xff0c;常见的图表可参…

高大上的数据可视化图表,只需6步就能完成

一份高质量的数据可视化图表&#xff0c;能够让你清晰、全面地传达出数据信息&#xff0c;成为你工作、学习、竞赛的助推器&#xff01; 因此&#xff0c;一款功能强大的可视化软件显得尤为重要&#xff01; 最近博主在用的百度 Sugar BI&#xff0c;里面的海量图表模板可以帮…

超级干货:手把手教你如何实现数据可视化

目录&#xff1a; 一、引言二、数据可视化1、数据可视化是什么&#xff1f;2、数据可视化的目的3、使用场景4、数据可视化工具5、ECharts 可视化工具1、什么是ECharts2、如何使用&#xff08;1&#xff09;下载&#xff08;2&#xff09;引入ECharts&#xff08;3&#xff09;使…

数据可视化就应该这么做!

整理&#xff1a;微信公众号5WPuss 今天分享一篇关于数据可视化设计的好文 前排提示&#xff0c;文末送2本Pandas相关的好书~ 在如今的工作中&#xff08;尤其是 B 端&#xff09;越来越多的会开始出现数据可视化的身影&#xff0c;对于一部分小伙伴来说这个概念是较为陌生的&a…

超级干货 :手把手教数据可视化工具Tableau

前言 数据的世界正在发生急剧变化&#xff0c;任何人都应该访问自己需要的数据&#xff0c;并具备获取任何数据的洞察力&#xff0c;而tableau正是帮我们洞察数据的好帮手。 Tableau作为BI tool leader ( 2016 Gartner BI chart), 它不仅是一款可视化软件&#xff0c;还具备不可…

阿里巴巴开源的免费数据库工具Chat2DB

Chat2DB 是一款由阿里巴巴开源的免费数据库工具&#xff0c;它为开发人员提供了一个强大且易于使用的平台&#xff0c;用于存储和查询数据。与传统的数据库工具相比&#xff0c;Chat2DB 具有以下特点和优势&#xff1a; 多数据库支持&#xff1a;Chat2DB 可以与多种类型的数据库…

猿创征文|实战开发openGauss DataStudio的sql联想结构

前段时间正好完成国产数据库openGauss DataStudio的sql语句表提示功能优化&#xff0c;借此机会来给大家分享一下我的开发过程以及经验。 项目暂时还处于结项阶段&#xff0c;如果大家在中间有更好的解决思路或者经验&#xff0c;非常欢迎大家前来讨论交流&#x1f60e; 实战开…

历史最全ChatGPT、LLM相关书籍、论文、博客、工具、数据集、开源项目等资源整理分享

ChatGPT是一个生成型预训练变换模型&#xff08;GPT&#xff09;&#xff0c;使用基于人类反馈的监督学习和强化学习在GPT-3.5之上进行了微调。这两种方法都使用了人类训练员来提高模型的性能, 通过人类干预以增强机器学习的效果&#xff0c;从而获得更为逼真的结果。在监督学习…

基于 ChatGLM-6B 搭建个人专属知识库

之前树先生教过大家如何利用微调打造一个垂直领域的 LLM 专属模型。但是微调一方面需要专业知识&#xff0c;通常需要很多计算资源和时间&#xff0c;以便在不同的超参数设置上训练多个模型并选择最佳的一个&#xff0c;另一方面动态扩展比较差&#xff0c;新增和修改原有的数据…

SpringBoot+Vue+WebSocket编写简单在线聊天室

WebSocket 简单入门 websocket 应用场景&#xff1a;社交订阅、多玩家游戏、协同编程/编辑、点击数据流、股票基金报价、体育实况更新、多媒体聊天、基于位置的应用、在线教育等等。 参考&#xff1a;https://blog.csdn.net/resilient/article/details/85613446 online-chatroo…

解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常。

1、在Chrome地址栏中输入:chrome://net-internals/#hsts; 进入Domain Sercurity Policy界面。 2、在下图中输入二级域名查询是否使用了强制 HTTPS 请求。3、如果有查询结果&#xff0c;则在最下方的delete栏处&#xff0c;删除该域名的信息 4、再次查询&#xff0c;如下图所示&…

Win11系统电脑浏览器打开页面时显示无法访问此页面

无法获取域名的正确IP地址&#xff0c;由此可见网页无法打开的问题很可能出现在DNS设置上了。打开网页出现“无法访问此页面”&#xff0c;可以通过更改DNS服务器地址解决该问题 1、首先打开系统设置 2.【控制面板】-【网络和Internet】-【网络连接】 3.选择使用下面的DNS服务…

浏览器无法访问此网站该如何处理?

打开浏览器搜索内容&#xff0c;发现浏览器网页无法显示&#xff0c;出现了如下的提示。然后本篇文章主要写给浏览器无法使用的人提供一些解决办法。 谷歌浏览器&#xff08;老版本&#xff09; 打开谷歌浏览器&#xff0c;首先进入浏览器点击右上方三个点&#xff0c;找到“…

无法访问此网站网址为 http://localhost:6000/xxx 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。 ERR_UNSAFE_POR

无法访问此网站 问题: 自己写的WEB服务, 端口6000在浏览器上怎么请求都无法访问此网站, 如下图: 在谷歌上访问: 在火狐上访问: 但是发现一个问题就是在Postman和IE里边测试是可以用的 原因&#xff1a;就是因为浏览器出于安全考虑, 会设置非安全不能访问的端口。 所以在平常开…

(2022年12月)解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常

1、问题描述&#xff1a; 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的&#xff0c;因此&#xff0c;此网页稍后可能会恢复正常 2、概念解释&#xff1a; HSTS&#xff1a;HSTS 是 HTTP 严格传输安全&#xff08;HTTP Strict Transport Security&…

谷歌浏览器提示,您目前无法访问,因为此网站使用了HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复

在本地建网站时&#xff0c;使用本地hosts转向域名&#xff0c;使用谷歌浏览器访问时出现了&#xff0c;您目前无法访问&#xff0c;因为此网站使用了HSTS。网络错误和攻击通常是暂时的&#xff0c;因此&#xff0c;此网页稍后可能会恢复。 解决方法&#xff1a; 1.在谷歌浏览…

Chrome浏览器出现无法访问此网站/无法显示此网页的错误,怎么解决?

出现"无法访问此网站"或"无法显示此网页"的错误&#xff0c;有很多原因会导致这个问题发生&#xff0c;下面说明如何解决这个问题。 升级Chrome到最新版本&#xff0c;首先确认您的Chrome已经升级到了最新的稳定版&#xff0c;将Chrome升级到最新版本&…