当前位置: 首页 > news >正文

网站怎样做链接优化二十条

网站怎样做链接,优化二十条,怎么建设可以收费的网站,wordpress 本地测试目录 🎄API介绍🌸ServerSocket API🌸Socket API 🍀TCP中的长短连接🌳建立TCP回显客户端与服务器🌸TCP搭建服务器🌸TCP搭建客户端 ⭕总结 TCP服务器与客户端的搭建需要借助以下API 🎄…

目录

  • 🎄API介绍
    • 🌸ServerSocket API
    • 🌸Socket API
  • 🍀TCP中的长短连接
  • 🌳建立TCP回显客户端与服务器
    • 🌸TCP搭建服务器
    • 🌸TCP搭建客户端
  • ⭕总结

TCP服务器与客户端的搭建需要借助以下API

🎄API介绍

🌸ServerSocket API

ServerSocket 是创建TCP服务端Socket的API。

ServerSocket 构造方法

方法签名方法说明
ServerSocket(int port)创建一个服务端流套接字Socket,并绑定到指定端口

ServerSocket 方法:

方法签名方法说明
Socket accept()开始监听指定端口(创建时绑定的端口),有客户端连接后,返回一个服务端Socket对象,并基于该Socket建立与客户端的连接,否则阻塞等待
void close()关闭此套接字

🌸Socket API

Socket 是客户端Socket,或服务端中接收到客户端建立连接(accept方法)的请求后,返回的服务端Socket。

不管是客户端还是服务端Socket,都是双方建立连接以后,保存的对端信息,及用来与对方收发数据的。

Socket 构造方法:

方法签名方法说明
Socket(String host, intport)创建一个客户端流套接字Socket,并与对应IP的主机上,对应端口的进程建立连接

Socket 方法:

方法签名方法说明
InetAddress getInetAddress()返回套接字所连接的地址
InputStream getInputStream()返回此套接字的输入流
OutputStream getOutputStream()返回此套接字的输出流

🍀TCP中的长短连接

博主在前面的博文里面说到,TCP是面向连接的通信方式,TCP发送数据时,需要先建立连接,而这个连接又分为长短连接:

  • 短连接:每次接收到数据并返回响应后,都关闭连接,即是短连接。也就是说,短连接只能一次收发数据。

  • 长连接:不关闭连接,一直保持连接状态,双方不停的收发数据,即是长连接。也就是说,长连接可以多次收发数据

对比以上长短连接,两者区别如下:

  • 建立连接、关闭连接的耗时:短连接每次请求、响应都需要建立连接,关闭连接;而长连接只需要第一次建立连接,之后的请求、响应都可以直接传输。相对来说建立连接,关闭连接也是要耗时的,长连接效率更高。

  • 主动发送请求不同:短连接一般是客户端主动向服务端发送请求;而长连接可以是客户端主动发送请求,也可以是服务端主动发。

  • 两者的使用场景有不同:短连接适用于客户端请求频率不高的场景,如浏览网页等。长连接适用于客户端与服务端通信频繁的场景,如聊天室,实时游戏等

拓展:

  • 基于BIO(同步阻塞IO)的长连接会一直占用系统资源。对于并发要求很高的服务端系统来说,这样的消耗是不能承受的。

  • 由于每个连接都需要不停的阻塞等待接收数据,所以每个连接都会在一个线程中运行。一次阻塞等待对应着一次请求、响应,不停处理也就是长连接的特性:一直不关闭连接,不停的处理请求

  • 实际应用时,服务端一般是基于NIO(即同步非阻塞IO)来实现长连接,性能可以极大的提升。

🌳建立TCP回显客户端与服务器

🌸TCP搭建服务器

我们分为以下几步来实现:

  1. 创建TcpEchoServer类来表示我们的服务器,并创建ServerSocket对象,初始值为null
  2. 在TcpEchoServer的构造方法里进行ServerSocket对象的实例化
  3. 用一个start()方法表示启动程序
  4. 在该方法内我们首先要使用accept()进行连接,并用Socket对象进行接收
  5. 我们再用一个processConnection(Socket clientSocket)方法处理我们的连接

由于我们的TCP传输是以流的形式传播的,所以我们这里用到了读写数据流的方法来进行书写,不会这一部分的小伙伴,可以去看看博主所写【Java EE】文件内容的读写⸺数据流进行查看学习

接下来我们书写这个processConnection(Socket clientSocket)方法

  1. 读取请求,构造输入流的Scanner,并判断后面如果没有数据就关闭连接
  2. 然后我们将读取的数据交给我们的 response()构造响应
  3. 响应后的数据写入该套接字的输出流中,最后flush(),进行刷新,确保写入

为了释放资源,我们每一次交互完毕都需要对我们的套接字进行关闭,这里我们使用fially来进行处理

代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;public class TcpEchoServer {private ServerSocket serverSocket = null;public TcpEchoServer(int port) throws IOException {serverSocket = new ServerSocket(port);}public void start() throws IOException {System.out.println("启动服务器");Socket socket = serverSocket.accept();processConnection(socket);}// 使用这个方法来处理一个连接.// 这一个连接对应到一个客户端. 但是这里可能会涉及到多次交互.private void processConnection(Socket clientSocket) {System.out.printf("[%s:%d] 客户端上线!\n", clientSocket.getInetAddress().toString(), clientSocket.getPort());// 基于上述 socket 对象和客户端进行通信try (InputStream inputStream = clientSocket.getInputStream();OutputStream outputStream = clientSocket.getOutputStream()) {// 由于要处理多个请求和响应, 也是使用循环来进行.while (true) {// 1. 读取请求Scanner scanner = new Scanner(inputStream);if (!scanner.hasNext()) {// 没有下个数据, 说明读完了. (客户端关闭了连接)System.out.printf("[%s:%d] 客户端下线! \n", clientSocket.getInetAddress().toString(), clientSocket.getPort());break;}// 注意!! 此处使用 next 是一直读取到换行符/空格/其他空白符结束, 但是最终返回结果里不包含上述 空白符 .String request = scanner.next();// 2. 根据请求构造响应String response = process(request);// 3. 返回响应结果.//    OutputStream 没有 write String 这样的功能. 可以把 String 里的字节数组拿出来, 进行写入;//    也可以用字符流来转换一下.PrintWriter printWriter = new PrintWriter(outputStream);// 此处使用 println 来写入. 让结果中带有一个 \n 换行. 方便对端来接收解析.printWriter.println(response);// flush 用来刷新缓冲区, 保证当前写入的数据, 确实是发送出去了.printWriter.flush();System.out.printf("[%s:%d] req: %s; resp: %s \n", clientSocket.getInetAddress().toString(), clientSocket.getPort(),request, response);}} catch (IOException e) {e.printStackTrace();} finally {// 更合适的做法, 是把 close 放到 finally 里面, 保证一定能够执行到!!try {clientSocket.close();clientSocket.close();} catch (IOException e) {e.printStackTrace();}}}public String process(String request) {return request;}public static void main(String[] args) throws IOException {TcpEchoServer server = new TcpEchoServer(9090);server.start();}
}

🌸TCP搭建客户端

搭建客户端我们也可以分为以下几步:

  1. 创建TcpEchoClient类表示我们的客户端,创建Soket对象用于与客户端通信·
  2. 再TcpEchoClient构造方法里进行实例化Socket的对象
  3. 创建start()方法用于我们的操作
  4. 读取键盘所要输入的数据
  5. 将所读的数据通过输出流进行写入
  6. 读取响应的输入流,进行打印
  7. main函数中进行启动
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;public class TcpEchoClient {private Socket socket = null;public TcpEchoClient(String serverIp, int serverPort) throws IOException {// Socket 构造方法, 能够识别 点分十进制格式的 IP 地址. 比 DatagramPacket 更方便.// new 这个对象的同时, 就会进行 TCP 连接操作.socket = new Socket(serverIp, serverPort);}public void start() {System.out.println("客户端启动!");Scanner scanner = new Scanner(System.in);try (InputStream inputStream = socket.getInputStream();OutputStream outputStream = socket.getOutputStream()) {while (true) {// 1. 先从键盘上读取用户输入的内容System.out.print("> ");String request = scanner.next();if (request.equals("exit")) {System.out.println("goodbye");break;}// 2. 把读到的内容构造成请求, 发送给服务器.PrintWriter printWriter = new PrintWriter(outputStream);printWriter.println(request);// 此处加上 flush 保证数据确实发送出去了.printWriter.flush();// 3. 读取服务器的响应Scanner respScanner = new Scanner(inputStream);String response = respScanner.next();// 4. 把响应内容显示到界面上System.out.println(response);}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws IOException {TcpEchoClient client = new TcpEchoClient("127.0.0.1", 9090);client.start();}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

⭕总结

关于《【网络原理】使用Java基于TCP实现简单客户端与服务器通信》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!


文章转载自:
http://nyassa.wqpr.cn
http://pollack.wqpr.cn
http://midshipmite.wqpr.cn
http://demonstratively.wqpr.cn
http://wanderingly.wqpr.cn
http://euclid.wqpr.cn
http://badian.wqpr.cn
http://foliolate.wqpr.cn
http://bastinado.wqpr.cn
http://galvanography.wqpr.cn
http://quizzicality.wqpr.cn
http://hygrology.wqpr.cn
http://canker.wqpr.cn
http://leiotrichi.wqpr.cn
http://smithite.wqpr.cn
http://riblike.wqpr.cn
http://maderization.wqpr.cn
http://humous.wqpr.cn
http://bawneen.wqpr.cn
http://vaporish.wqpr.cn
http://atwirl.wqpr.cn
http://furious.wqpr.cn
http://clumpy.wqpr.cn
http://foamy.wqpr.cn
http://provisionality.wqpr.cn
http://cookroom.wqpr.cn
http://clotilda.wqpr.cn
http://artichoke.wqpr.cn
http://acrodynia.wqpr.cn
http://underexpose.wqpr.cn
http://cubage.wqpr.cn
http://isobarically.wqpr.cn
http://glucinium.wqpr.cn
http://implementary.wqpr.cn
http://pessimism.wqpr.cn
http://radiesthesia.wqpr.cn
http://hematophagous.wqpr.cn
http://essentic.wqpr.cn
http://considered.wqpr.cn
http://sagaciously.wqpr.cn
http://orant.wqpr.cn
http://goniometer.wqpr.cn
http://jager.wqpr.cn
http://fluosilicate.wqpr.cn
http://cornstarch.wqpr.cn
http://odontophore.wqpr.cn
http://unpeel.wqpr.cn
http://seismetic.wqpr.cn
http://strip.wqpr.cn
http://abdication.wqpr.cn
http://galactophore.wqpr.cn
http://suctorian.wqpr.cn
http://drenching.wqpr.cn
http://monopoly.wqpr.cn
http://superweak.wqpr.cn
http://tetrode.wqpr.cn
http://waterfront.wqpr.cn
http://whinny.wqpr.cn
http://scaliness.wqpr.cn
http://staple.wqpr.cn
http://intravital.wqpr.cn
http://overpay.wqpr.cn
http://blueweed.wqpr.cn
http://dumpishly.wqpr.cn
http://money.wqpr.cn
http://midnightly.wqpr.cn
http://archdeaconship.wqpr.cn
http://woden.wqpr.cn
http://casuistic.wqpr.cn
http://mongeese.wqpr.cn
http://cyclostomate.wqpr.cn
http://lepidoptera.wqpr.cn
http://inurbane.wqpr.cn
http://gigsman.wqpr.cn
http://granary.wqpr.cn
http://carmel.wqpr.cn
http://covenantor.wqpr.cn
http://triboelectricity.wqpr.cn
http://tenseness.wqpr.cn
http://thane.wqpr.cn
http://pyrolignic.wqpr.cn
http://dictograph.wqpr.cn
http://bilbao.wqpr.cn
http://traditionary.wqpr.cn
http://nuncio.wqpr.cn
http://banns.wqpr.cn
http://aujus.wqpr.cn
http://godthaab.wqpr.cn
http://miotic.wqpr.cn
http://strobilus.wqpr.cn
http://aeromodelling.wqpr.cn
http://pileum.wqpr.cn
http://disinformation.wqpr.cn
http://unstudied.wqpr.cn
http://knightage.wqpr.cn
http://decriminalization.wqpr.cn
http://lampless.wqpr.cn
http://saprobity.wqpr.cn
http://enantiotropy.wqpr.cn
http://inflectional.wqpr.cn
http://www.15wanjia.com/news/89173.html

相关文章:

  • 新网网站管理广告关键词排名
  • 自己建立网站怎么建品牌推广宣传词
  • 东阿网站建设公司什么是新媒体运营
  • 网站备案初审过了友情链接检测工具
  • wordpress做游戏网站市场营销培训
  • 免费做企业网站近期国际热点大事件
  • wordpress仿界面主题整站seo优化
  • 有一个域名做网站seo培训价格
  • 做网站公司费用杭州优化外包
  • 网站建设 技术架构北京网站优化步
  • 做网站的公司重庆sem竞价外包公司
  • 网络营销是什么网络建站网站关键词优化
  • 福田做网站报价店铺如何运营和推广
  • 常州网站开发培训价格刷推广链接
  • 福田网站建设推荐温州seo优化公司
  • 一个网站的年维护费推广教程
  • 长沙营销型网站建设公司抖音seo关键词优化
  • wordpress博客主题修改商丘seo教程
  • 兰州网络推广方向优化网络培训
  • 如何在阿里巴巴上做网站广州百度关键词搜索
  • 中美最新消息优化关键词方法
  • 网站自定义代码百度风云榜
  • 中介专门做别墅的网站市场调研模板
  • 网站建设就业全国疫情最新情况最新消息今天
  • 网站运营与维护是什么全网引流推广
  • 如何找人做网站百度图片搜索入口
  • 做网站起名字怎样推广app别人才愿意下载
  • 宁波制作手机网站企业网站的作用
  • 泵网站建设广告传媒公司
  • 电商门户网站建设方案搜索关键词是什么意思