网络——连接到server

【0】README

0.1) 本文描述部分转自 core java volume 2 , 旨在理解 网络——连接到server 的基础知识 ;
0.2) for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter3/SocketTest.java + https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter3/InetAddressTest.java ;


【1】连接到服务器相关

1)首先了解 telnet 这个工具,调试网络程序非常有帮助;

  • 1.1)telnet 简介: Telnet是进行远程登录的标准协议和主要方式,它为用户提供了在本地计算机上完成远程主机工作的能力。可以用telnet命令来测试端口号是否正常打开还是关闭状态。
  • 1.2)Telnet 客户端命常用命令:
    • open : 使用 openhostname 可以建立到主机的 Telnet 连接。
    • close : 使用命令 close 命令可以关闭现有的 Telnet 连接。
    • display : 使用 display 命令可以查看 Telnet 客户端的当前设置。
    • send : 使用 send 命令可以向 Telnet 服务器发送命令。支持以下命令:
    • ao : 放弃输出命令。
    • ayt : “Are you there”命令。
    • esc : 发送当前的转义字符。
    • ip : 中断进程命令。
    • synch : 执行 Telnet 同步操作。
    • brk : 发送信号。
        上表所列命令以外的其他命令都将以字符串的形式发送至 Telnet 服务器。例如,sendabcd 将发送字符串 abcd 至 Telnet 服务器,这样,Telnet 会话窗口中将出现该字符串。
    • quit : 使用 quit 命令可以退出 Telnet 客户端。

  • 1.3)运行在远程计算机上的服务器软件不停等待那些希望与端口13 连接的网络请求。 一旦建立连接, 远程程序便发送回一行数据, 然后关闭该连接。
 try (Socket s = new Socket("time-A.timefreq.bldrdoc.gov", 13)){InputStream inStream = s.getInputStream();Scanner in = new Scanner(inStream);while (in.hasNextLine())

这里写图片描述
对上述代码的分析(Analysis):

  • A1)第一行打开一个套接字。它也是网络软件(如 telnet 提供本地计算机操作远程计算机的功能)中的一个抽象概念, 负责启动该程序内部和外部之间的通信;(干货——套接字的抽象概念的具体含义是网络软件,如telnet, 而telnet又是进行远程登录的标准协议和主要方式)
  • A2)一旦套接字被打开: java.net.Socket 类中的getInputStream 方法就会返回一个 InputStream 对象,该对象可以像其他任何流对象一样使用;

【2】套接字超时

1)problem+solution

  • 1.1)problem:从套接字读取信息时, 在有数据可供访问之前, 读操作将会被阻塞;
  • 1.2)solution:对于不同的应用,应该确定合理的超时值,然后调用 setSoTimeout 方法设置这个超时值, 如:
Socket s = new Socket(...);
s.setSoTimeout(10000);

2)捕获SocketTimeoutException 异常:如果设置了超时, 并且之后的读操作和写操作在没有完成之前就超过了时间限制, 那么这些操作就会抛出 SocketTimeoutException 异常, 你可以捕获这个异常, 对超时做出反应;
3)另外还有一个超时问题需要解决(problem+solution):

  • 3.1)下面这个构造器(problem): Socket(String host, int port) 会一直无限期地阻塞下去, 直到建立了到达主机的初始连接为止;
  • 3.2)solution:可以通过先构建一个无连接的套接字,然后再使用一个超时来进行连接的方法解决这个问题: (干货——使用超时限制来解决Socket构造器可能无限阻塞下去的case)
Socket s = new Socket();
s.connect(new InetSocketAddress(host, port), timeout);

【3】因特网地址(主机名和因特网地址间的转换,使用InetAddress 类)

1)静态的getByName 方法可以返回代表某个主机的 InetAddress 对象, 如:

InetAddress address = InetAddress.getByName("www.baidu.com");
  • 1.1)然后使用getAddress 方法来访问这些字节:
byte[] addressBytes = address.getAddress();
  • 1.2)getAllByName方法:一些访问量较大的主机名通常会对应多个因特网地址, 以实现负责均衡。当客户端访问主机时, 会随机选择其中的一个。 可以通过调用 getAllByName 方法来获得所有主机: (干货——访问量较大的主机名通常会对应多个因特网地址,通过getAllByName方法获取所有的因特网地址)
String host = args[0];
InetAddress[] addresses = InetAddress.getAllByName(host);
  • 1.3)可以使用静态的getLocalHost 方法来得到本地主机的地址:
InetAddress address = InetAddress.getLocalHost();

这里写图片描述

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

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

相关文章

文件服务器监控用户修改信息,文件服务器监控日志软件

文件服务器监控日志软件 内容精选换一换有以下几种现象:将制作好的SD卡插入开发者板并上电后,开发者板LED1与LED2灯状态信息异常。将制作好的SD卡插入开发者板,并通过USB方式连接Ubuntu服务器,上电、开发者板启动完成后&#xff0…

java –cp ./:_成为Java流大师–第3部分:终端操作

java –cp ./:比尔盖茨曾经说过:“我选择一个懒惰的人去做一件困难的事情,因为一个懒惰的人会找到一个简单的方法来做。” 关于流,没有什么比这更真实了。 在本文中,您将学习Stream如何通过在调用终端操作之前不对源元素执行任何计…

Oracle入门(四)之查询基本信息

一、查询基本信息 (1) 查询实例服务SQL> show parameter instance name(2)查询数据库名字SQL> show parameter db_name;(3)查询数据库名字SQL>select name from v$database;(4&#xf…

网络——实现服务器

【0】README 0.1) 本文描述部分转自 core java volume 2 , 旨在理解 网络——实现服务器 的基础知识 ; 0.2) for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/ch…

image 闪烁 c# ajax updatepanel,Why doesn't asp:UpdatePanel refresh an Image?

问题I have the following UpdatePanel that gets an image from an ashx handler all of which works fine when the page is refreshed. However, when the timer fires, the label is refreshed with current time, but never the image.ImageUrl"~/getImage.ashx?cam…

kafka处理流式数据_通过Apache Kafka集成流式传输大数据

kafka处理流式数据从实时过滤和处理大量数据,到将日志数据和度量数据记录到不同来源的集中处理程序中,Apache Kafka越来越多地集成到各种系统和解决方案中。 使用CData Sync ,可以轻松地将此类解决方案应用于任何CRM,ERP或Analyti…

Oracle入门(十一)之SQL

一、SQL组成 SQL的组成 核心SQL主要有四个部分: 1、数据定义语言即SQL DDL(Data Definition Language ),用于定义 SQL模式、基本表、视图、索引等结构。 CREATE、ALTER、DROP、REVOKE、GRANT2、数据操纵语言 即SQL DML(Data Manipulation Language)。 数…

常见 Java 字节码 指令 助记符

转自: 常见java字节码 有时候为了能理解JVM对程序所做的优化等,需要查看程序的字节码,因此知道了解一些常见的指令集很重要! 指令码 助记符 说明 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02…

等价关系和等价类_确定Java等价性的新时代?

等价关系和等价类几个月前,我读了一篇题为“确定Java等价性的新时代?”的博客文章。 这在某种程度上与我当时在我那令人沮丧的副项目Java :: Geci中开发的内容非常吻合 。 我建议您暂停阅读,阅读原始文章,然后再返回此处&#xff…

数据结构(一)之链表

一、链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分&#xff…

高级数据结构实现——自顶向下伸展树

【0】README 1) 本文部分内容转自 数据结构与算法分析,旨在理解 高级数据结构实现——自顶向下伸展树 的基础知识; 2) 源代码部分思想借鉴了数据结构与算法分析,有一点干货原创代码,for original source …

测试框架 如何测试私有方法_高效的企业测试–测试框架(5/6)

测试框架 如何测试私有方法本系列文章的这一部分将介绍测试框架以及我在何时以及是否应用它们方面的想法和经验。 关于测试框架的想法 我对大多数测试框架不太满意的原因是,按照我的观点,它们大多增加了语法上的便利性和便利性,但是本质上并…

数据结构(二)之链表反转

一、链表反转 1、反转非递归算法 2、反转递归算法 链表结点&#xff1a; package cn.edu.scau.mk;/**** author MK* param <T>*/ public class Node<T> {private T data;private Node<T> next null;public Node(T data) {this.data data;}public T getD…

web安全测试视频课程专题_有关有效企业测试的视频课程

web安全测试视频课程专题我已经制作了一些有关有效企业测试的视频。 在实际项目中&#xff0c;我仍然认为该主题非常重要。 这是我在测试Enterprise Java项目中的经验以及一些示例。 1.介绍和有效的Maven使用 在此视频中&#xff0c;我将介绍测试过程&#xff0c;并演示如何使…

网络——获取Web数

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 “网络——获取Web数” 的基础知识&#xff1b; 0.2&#xff09; for source code , please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chap…

数据结构(三)之单链表反向查找

一、反向查找单链表 1、简单查找 先遍历获取单链表单长度n&#xff0c;然后通过计算得到倒数第k个元素的下标为n-k&#xff0c;然后查找下标为n-k的元素。 2、优化查找 先找到下标为k的元素为记录点p1&#xff0c;然后设置新的记录点p2的下标从0开始&#xff0c;同时遍历两个…

java使用:: 表达式_Java 13:切换表达式的增强功能

java使用:: 表达式您可能还记得我以前的文章&#xff0c;在Java 12中&#xff0c;传统的switch语句得到了增强&#xff0c;因此可以用作表达式。 在Java 13中&#xff0c;对该功能进行了进一步的更改 。 break语句不能再返回值。 相反&#xff0c;您必须使用新的yield语句&…

网络——Base64Encode(转:自定义Base64编码器——Base64Encode)

【0】README 0.1&#xff09; 本文source code 转自 core java volume 2 &#xff0c; 旨在了解 如何定义一个 编码器&#xff0c; 如Base64Encode &#xff1b; 0.2&#xff09;注意&#xff1a; 区别自定义的 Base64Encode 和 java.util.Base64 编码器 0.3&#xff09;fo…

数据结构(四)之单链表查找中间结点

一、查找单链表中间结点 1、简单查找 先遍历获取单链表单长度n&#xff0c;然后通过计算得到中间结点为n/2&#xff0c;然后查找下标为n/2的元素。 2、优化查找 先设置记录点fast、slow&#xff0c;下标均从0开始&#xff0c;fast走两步&#xff0c;slow走一步&#xff0c;同…

java面试常见面试问题_Java面试准备:15个Java面试问题

java面试常见面试问题并非所有的访谈都将重点放在算法和数据结构上—通常&#xff0c;访谈通常只侧重于您声称是专家的语言或技术。在此类访谈中&#xff0c;通常没有任何“陷阱”问题&#xff0c;而是它们要求您利用内存和使用该语言的经验–换句话说&#xff0c;它们测试您对…