当前位置:文档之家› 完成端口模型的使用与分析

完成端口模型的使用与分析

完成端口模型的使用与分析
完成端口模型的使用与分析

完成端口模型的使用与分析

摘要:完成端口是一种复杂的win32内核对象。应用程序可以用完成端口管理线程池为大量的异步i/o请求提供服务,而不必为每个i/o请求分别创建服务线程。完成端口模型用于开发服务器应用程序,以提供优良的伸缩性和获得最好的系统性能。本文构建了一个基本的网络服务器程序框架,对完成端口模型的用法进行阐述与分析。

关键词:完成端口;线程池;套接字

the usage and analysis of completion port model zhou peng,huang can,jiang nan(unit 91550 of pla, dalian 116023, liaoning)

【abstract】completion port is a complicated win32 kernel object. applications can provide service for a large number of

asynchronous i/o requests by using completion port to manage thread pool, and needn’t create service threads for each i/o request. completion port model is used to develop server application to provide excellent scalability and get the best system performance. this paper constructed a basic network server application framework, expatiated and analyzed the usage of completion port model.

【key words】completion port; thread pool; socket

0 引言

在win32中,套接字是一个指向传输提供者的句柄[1]。winsock 提供了锁定和非锁定两种套接字模式,以决定winsock函数随套接字调用时的行为。锁定模式虽然容易使用,但对于建立连接的多个套接字,或数据收发量不均,时间不规律的情况,却难以管理;而非锁定模式则难以处理winsock函数调用时可能会收到的wsaewouldblock错误。

为了解决套接字模式存在的限制,winsock提供了一些套接字模型,帮助应用程序通过异步方式,一次对一个或多个套接字上进行的i/o操作加以管理。这些模型包括:select(选择)、wsaasyncselect(异步选择)、wsaeventselect(事件选择)、overlapped i/o(重叠i/o)和completion port(完成端口)。相对于其它套接字模型,完成端口模型是最复杂的、也是伸缩性最好的一种模型。当应用程序作为服务器为大量套接字的i/o请求提供服务时,使用这种模型会获得最好的系统性能。许多高性能服务器,如apache、iis等,都使用了完成端口模型的技术[2]。因此,掌握完成端口模型的用法和工作机制是非常必要的。

1 完成端口模型的使用和分析

下面将构建一个基本的网络服务器程序框架,对使用完成端口模型管理大量套接字的方法加以论述。程序框架的构建步骤如下:

(1)创建一个完成端口;

(2)创建线程池;

(3)创建套接字监听客户连接请求;

(4)为完成端口关联连接返回的套接字;

(5)在建立的连接上进行i/o操作。

1.1 创建完成端口

要创建完成端口,应调用createiocompletionport函数:handle createiocompletionport(handle hfile,

handle hexistingcompletionport,

dword dwcompletionkey,

dword dwnumberofconcurrentthreads);该函数完成两种不同的工作:(1)创建一个完成端口;(2)把一个设备同完成端口相关联。如果只创建一个完成端口,可以这样调用函数:

handle hiocp = createiocompletionport(invalid_

handle_value, null, 0, 0);

参数dwnumberofconcurrentthreads定义了完成端口能够同时运行的最多线程数。如果该参数为0,完成端口缺省允许的并发线程数目是计算机上的cpu数目。这样,每个

cpu可以运行一个线程,以避免多余的线程上下文切换,节省cpu 的周期。如果处理一个客户请求需要一段比较长的时间,为了提高应用程序的伸缩性,可能需要增大该值。

1.2 创建线程池

成功创建完成端口对象之后,就需要创建一个线程池来处理客户请求。虽然创建线程时系统资源的开销比较小,但远非可以忽略不计。在程序初始化时创建一个线程池,可以避免运行时创建线程。如果这些线程在应用程序执行期间是空闲的,程序的性能就能进一步提高。

线程池中的线程数量应该有一个上限,因为创建太多的线程会浪费系统资源。对于池中应该有多少线程,微软公司给出的参考答案是将计算机上的cpu数目乘以2。值得注意的是,应该使线程池中至少有一个线程能接受客户请求。如果池中所有的线程都在忙,就可能拒绝客户请求,所以最好是用更多的上下文切换接受和处理客户请求。

如果计算机有两个cpu,那么应该创建4个线程等待完成的i/o 请求:

handle hthread = null; for (int n=0; n 1.3 创建套接字监听客户连接请求

创建一个监听套接字:

socket slisten = wsasocket(af_inet, sock_ stream, 0, null, 0,

wsa_flag_overlapped);绑定监听套接字到本机地址,端口号为5150:struct sockaddr_in saserver;

saserver.sin_family = af_inet;

saserver.sin_addr.s_addr = inet_addr(inaddr_ any); saserver.sin_port = htons(5150);

bind(slisten, (sockaddr *)&saserver, sizeof(saserver)); 套接字监听客户连接请求,允许的最大连接数为200:

listen(slisten, 200);

1.4 为完成端口关联连接返回的套接字

监听套接字在接受客户连接请求后,返回一个建立真正连接的新套接字。调用createiocompletionport函数为完成端口对象关联这个新套接字。函数的前两个参数分别是套接字和完成端口的对象句柄,第三个参数dwcompletionkey称为“完成键”,是一个32位值的参数,通常用作指针指向一个描述套接字的相关信息的结构。应用程序把套接字关联到完成端口后,就可以通过该端口管理套接字上的异步i/o请求。

定义描述套接字相关信息的结构:

接受一个连接请求,返回套接字关联到完成端口上,然后投递一个i/o请求: while (true) { struct sockaddr_in saremote; int nsalen = sizeof(saremote);

socket snew = accept(slisten, (sockaddr

*)&saremote,&nsalen);

lpioreq pioreq = new ioreq; pioreq->s = snew;

pioreq->op = op_read;

createiocompletionport((handle)ioreq->s, hiocp, (dword)pioreq, 0);

postrecvreq(pioreq);

}

为了避免定义的ioreq结构变量作为临时变量被系统回收而导致应用程序出错,应该使用new操作符为该变量分配堆内存,其地址将作为完成端口的完成键传递套接字的相关信息。

1.5 在建立的连接上进行i/o操作

主线程创建完线程池后,池中的线程调用getqueued completionstatus函数进入空闲状态,等待完成端口上的完成的i/o请求。

当一个套接字上的异步i/o请求完成时,系统检查该套接字是否关联了一个完成端口。如果是,该端口对象内部的i/o完成队列加入一个完成的i/o请求项。当线程池中运行的线程数目小于完成端口允许并发线程的最大数目,该端口就唤醒一个空闲线程处理完成的i/o请求,然后按照先进先出(fifo)的顺序从i/o完成队列中移除被处理的i/o请求项。

值得注意的是,对线程池中空闲线程的调用是按照后进先出(lifo)顺序的。如果i/o请求完成的足够慢,完成端口就总是唤

醒同一个线程,而没有被调度的线程的内存资源就可以被交换到磁盘上和从cpu缓存中清除,这样会有效地提高应用程序的性能。

如果线程处理了一个失败的i/o请求,应该使用delete操作符从堆内存中释放相应的ioreq结构变量,以防止因内存泄露而导致系统资源耗尽。

2 总结

完成端口模型的设计非常合理,它组合了重叠i/o和独立线程的特性[3]。使用线程池处理异步i/o请求,就是用少量线程管理大量的套接字,而不需要为每个客户端创建服务线程处理异步i/o请求,这样就大大节省了创建线程和切换线程上下文的系统开销。另外,完成端口使用后进先出的方式调用服务线程,也会有效地减少对系统资源的使用。因此,对于处理大量i/o请求的服务器程序,应该优先考虑使用完成端口模型,以获得良好的伸缩性和最好的系统性能。

参考文献

[1] 陈坚,陈伟,等. visual c++网络高级编程[m]. 北京:人民邮电出版社,2001.

[2] 王艳平,张越. windows网络与通信程序设计[m]. 北京:人民邮电出版社,2006.

[3] hart j m. windows系统编程(原书第三版)[m]. 安娜,吴明军. 北京:机械工业出版社,2006.

TCP的客户 服务器 端口扫描程序设计

海南大学信息科学技术学院《安全扫描技术》 TCP的客户/服务器/端口扫描程序设计 学号: ______ 姓名: 年级: 2010级 __________ 专业:信息安全 ______ 指导老师:顾剑 ____

目录 1实验目的及要求 (1) 2实验的背景及意义 (1) 3实验流程 (1) 4实验内容与步骤 (3) 5实验代码 (5) 5.1 TCP服务器程序: (5) 5.2 TCP客户端: (8) 5.3 TCP端口扫描: (10) 6实验操作手册 (11) 7实验总结 (14)

第 1 页共17 页 1实验目的及要求 (1)、熟悉Microsoft Visual Studio 2006编程环境。 (2)、了解TCP客户/服务器/扫描端口的模型原理。 (3)、熟悉Socket编程原理,掌握简单的套接字编程。 2实验的背景及意义 (1)、TCP客户和服务器 TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后数据传送,最后拆除连接三个过程并且TCP在建立连接时又分三步走: 第一步是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号; 第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP 序号被加一,ACK即确认(Acknowledgement)。 第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。然后才开始通信的第二步:数据处理。 这就是所说的TCP三次握手(Three-way Handshake)。简单的说就是:(C:客户端,S:服务端) C:SYN到S S:如成功--返回给C(SYN+ACK) C:如成功---返回给S(ACK)以上是正常的建立连接方式(2)、TCP端口扫描 “端口”在计算机网络领域中是个非常重要的概念。它是专门为计算机通信而设计的,它不是硬件,不同于计算机中的“插槽”,可以说是个“软插槽”。如果有需要的话,一台计算机中可以有上万个端口。 端口是由TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。具体来说,就是用[IP:端口]来定位一台主机中的进程。可以做这样的比喻,端口相当于两台计算机进程间的大门,可以随便定义,其目的只是为了让两台计算机能够找到对方的进程。计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。如果要和远程主机A的程序通信,那么只要把数据发向[A:端口]就可以实现通信了。 可见,端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。由此可见,入侵者通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接,这也是端口扫描的主要目的。 3实验流程 (1)、TCP客户程序和服务器程序流程图 程序分两部分:客户程序和服务器程序。 工作过程是:服务器首先启动,它创建套接字之后等待客户的连接;客户启动后创建套接字,然后和服务器建立连接;建立连接后,客户接收键盘输入,然后将数据发送到服务器,服务器收到到数据后,将接收到的字符在屏幕上显示出来。或者服务器接收键盘输入,然后将数据发送到客户机,客户机收到数据后,将接收到的字符在屏幕上显示出来。

IOCP完成端口详解(10年吐血大总结)

IOCP完成端口超级详解 目录: 1.完成端口的优点 2.完成端口程序的运行演示 3.完成端口的相关概念 4.完成端口的基本流程 5.完成端口的使用详解 6.实际应用中应该要注意的地方 一.完成端口的优点 1. 我想只要是写过或者想要写C/S模式网络服务器端的朋友,都应该或多或少的听过完成端口的大名吧,完成端口会充分利用Windows内核来进行I/O的调度,是用于C/S 通信模式中性能最好的网络通信模型,没有之一;甚至连和它性能接近的通信模型都没有。 2. 完成端口和其他网络通信方式最大的区别在哪里呢? (1) 首先,如果使用“同步”的方式来通信的话,这里说的同步的方式就是说所有的操作都在一个线程内顺序执行完成,这么做缺点是很明显的:因为同步的通信操作会阻塞住来自同一个线程的任何其他操作,只有这个操作完成了之后,后续的操作才可以完成;一个最明显的例子就是咱们在MFC的界面代码中,直接使用阻塞Socket调用的代码,整个界面都会因此而阻塞住没有响应!所以我们不得不为每一个通信的Socket都要建立一个线程,多麻烦?这不坑爹呢么?所以要写高性能的服务器程序,要求通信一定要是异步的。 (2) 各位读者肯定知道,可以使用使用“同步通信(阻塞通信)+多线程”的方式来改善(1)的情况,那么好,想一下,我们好不容易实现了让服务器端在每一个客户端连入之后,都要启动一个新的Thread和客户端进行通信,有多少个客户端,就需要启动多少个线程,对吧;但是由于这些线程都是处于运行状态,所以系统不得不在所有可运行的线程之间进行上下文的切换,我们自己是没啥感觉,但是CPU却痛苦不堪了,因为线程切换是相当浪费CPU时间的,如果客户端的连入线程过多,这就会弄得CPU都忙着去切换线程了,根本没有多少时间去执行线程体了,所以效率是非常低下的,承认坑爹了不? (3) 而微软提出完成端口模型的初衷,就是为了解决这种"one-thread-per-client"的缺点的,它充分利用内核对象的调度,只使用少量的几个线程来处理和客户端的所有通信,消除了无谓的线程上下文切换,最大限度的提高了网络通信的性能,这种神奇的效果具体是如何实现的请看下文。

主机端口扫描程序设计

主机端口扫描程序设计 摘要 计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。端口扫描技术是发现安全问题的重要手段之一。 本程序是在Windows系统中使用C语言用MFC完成的一个端口扫描程序。此程序主要完成了TCP connect()扫描和UDP扫描功能。TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网段内的主机进行逐个扫描。能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描。此端口扫描程序能快速地进行TCP扫描,准确地检测出对TCP协议开放的端口。而对于UDP扫描只支持单线程,速度较慢。扫描结果以列表的形式直观地展现出来。 关键词:端口扫描、TCP扫描、UDP扫描、TCP多线程扫描

目录 1引言 (1) 1.1 课题的背景及意义 (1) 1.2 端口扫描现状 (1) 2系统设计 (1) 2.1 系统主要目标 (1) 2.2 开发环境及工具 (1) 2.3 功能模块与系统结构 (2) 3系统功能程序设计 (4) 3.1 获取本机IP (4) 3.2 分割字符串函数的实现 (4) 3.3 获取待扫描的IP地址 (5) 3.4 获取待扫描的端口号 (5) 3.4.1 指定端口号的初始化 (6) 3.4.2 指定端口号的保存 (7) 3.5 TCP CONNECT()扫描 (8) 3.5.1 基本原理 (8) 3.5.2 扫描多个主机多端口多线程的实现 (8) 3.5.3 扫描结果的显示 (9) 3.6 UDP扫描 (10) 3.6.1 基本原理 (10) 3.6.2 计算效验和 (11) 3.6.3 发送UDP数据包 (11) 3.6.4 接收ICMP数据包 (12) 4测试报告 (12) 4.1 TCP扫描检测 (12) 4.1.1扫描本机 (12) 4.1.2扫描网络中其他主机 (13) 4.1.3 扫描IP段 (13) 4.2 UDP扫描检测 (14) 4.2.1 扫描本机 (14) 4.1.2扫描网络中其他主机 (15) 4.3 TCP、UDP一起扫描 (16) 结论 (17) 参考文献 (17)

IOCP完成端口原理-详解

本文主要探讨一下windows平台上的完成端口开发及其与之相关的几个重要的技术概念,这些概念都是与基于IOCP的开发密切相关的,对开发人员来讲,又不得不给予足够重视的几个概念: 1) 基于IOCP实现的服务吞吐量 2)IOCP模式下的线程切换 3)基于IOCP实现的消息的乱序问题。 一、IOCP简介 提到IOCP,大家都非常熟悉,其基本的编程模式,我就不在这里展开了。在这里我主要是把IOCP中所提及的概念做一个基本性的总结。IOCP的基本架构图如下: 如图所示:在IOCP中,主要有以下的参与者: --》完成端口:是一个FIFO队列,操作系统的IO子系统在IO操作完成后,会把相应的IO packet放入该队列。 --》等待者线程队列:通过调用GetQueuedCompletionStatus API,在完成端口上等待取下一个IO packet。 --》执行者线程组:已经从完成端口上获得IO packet,在占用CPU进行处理。除了以上三种类型的参与者。我们还应该注意两个关联关系,即: --》IO Handle与完成端口相关联:任何期望使用IOCP的方式来处理IO请求的,必须将相应的IO Handle与该完成端口相关联。需要指出的时,这里的IO Handle,可以是File的Handle,或者是Socket的Handle。 --》线程与完成端口相关联:任何调用GetQueuedCompletionStatus API的线程,都将与该完成端口相关联。在任何给定的时候,该线程只能与一个完成端口相关联,与最后一次调用的GetQueuedCompletionStatus为准。 二、高并发的服务器(基于socket)实现方法

运用冰山模型分析

运用冰山模型分析《肖申克的救赎》 人力资源0901 彭诏翕 09205120 《肖申克的救赎》改编自史蒂芬金《不同的季节》中收录的《丽塔海华丝及萧山克监狱的救赎》。影片《肖申克的救赎》在牢狱题材电影中突破了类型片的限制,拍出了同类作品罕见的人情味和温馨感觉,因而在公映时成为卖座鼎盛的黑马。 故事发生在1947年,银行家安迪因为妻子有婚外情,酒醉后本想用枪杀了妻子和她的情人,但是他最终没有下手。然而一个不幸的巧合发生了——那晚另外有一个人有人枪杀了他的妻子和她的情人,于是安迪被指控为谋杀,并获判判无期徒刑,这意味着他将在肖申克监狱渡过余生。 长时间以来,安迪几乎不和任何人接触。一个月后,安迪请瑞德帮他搞的第一件东西是一把石锤想雕刻一些小东西以消磨时光,并说自己想办法逃过狱方的例行检查。之后,安迪又搞了一幅丽塔.海华丝的巨幅海报贴在了牢房的墙上。一次,安迪和另几个犯人外出劳动,他无意间听到监狱官在讲有关上税的事。安迪说他有办法可以使监狱官合法地免去这一大笔税金,作为交换,和他共同工作的犯人每人得到了3瓶啤酒。喝着啤酒,瑞德猜测安迪只是借用这个空闲享受短暂的自由。这也就是冰山模型的冰上部分,代表表层特征:如知识、技能等,即基准性胜任特征这只是对胜任者基础素质的要求,这些特征容易感知,但不能预测或决定能否在工作中有突出的表现。 但是随后,他被派去当监狱的图书馆管理员,为了争取图书馆的图书更新,他每周写一封信,为图书馆的扩大而努力着,六年后,他实现了愿望。同时,他开始帮助道貌岸然的典狱长洗黑钱。并且为监狱其他狱警处理其他涉及经济和税务事项所需的文件。这也就体现了冰山模型的第一层级:是与完成工作或与职位有关的必须具备的可观察到的知识和技能,职位和任务能够被恰当地执行所需要的能力,专业知识和技能通过专业和职业的培训可以学习到。 价值观等文化方面的第二层级:包括了价值观、态度、社会角色、自我形象。这些价值和标准是一种对世界和他人的看法,是一种对文化、价值和传统的特殊看法,涉及到人格和专业框架,包括价值、定位、标准和规范,能够辨认出胜任特征的人格特性,则在60年代,小伙子汤米因盗窃入狱,很快成为安迪和瑞德的

端口扫描程序设计

网络安全程序设计结课论文端口扫描程序设计

目录 第一章序言 (3) 第二章系统设计 (5) 2.1 运行环境及语言 (5) 2.2系统功能 (6) 2.3程序运行流程图 (6) 2.4 程序设计过程 (6) 2.41创建工程 (6) 2.42 主机端口扫描程序设计流程 (8) 2.43主要代码 (9) 2.5运行结果测试 (15) 第三章总结及心得 (16) 3.1 总结 (16) 3.2 心得体会 (16) 第四章参考文献 (16)

第一章序言 1.1 背景 Internet快速的发展,为我们带来了方便同时也带给了我们信息安全担忧。在计算机信息安全管理中可以通过端口扫描收集系统的信息来自动监测远程或本地主机安全性弱点的程序,可以发现远程服务器的各种tcp端口的分配及提供的服务与他们的软件版本。从而让管理员间接的或直观的了解到远程主机所存在的安全问题。从而端口扫描技术得到人们的重视。 1.2目的 该文章对端口扫描技术的原理和应用进行了阐述,并设计了一个简单的基于windows平台上的端口扫描系统。此程序主要完成了TCP connect()扫描和UDP扫描功能。TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网段的主机进行逐个扫描。能扫描特定的部分端口号或对指定的端口段的端口进行逐个扫描。此端口扫描程序能快速地进行TCP扫描,准确地检测出对TCP协议开放的端口。而对于UDP扫描只支持单线程,速度较慢。扫描结果以列表的形式直观地展现出来。 1.3端口扫描概述 网络安全探测在网络安全中起着主动防御的作用,占有非常重要的地位。网络安全探测的所有功能都是建立在端口扫描的基础

ATMEGA16的IO端口

第九课A Tmega16(L)的IO端口 本教程节选自周兴华老师《手把手教你学A VR单片机C程序设计》教程,如需转载,请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书实验器材,可登陆周兴华单片机培训中心网购部自助购买! ATmega16(L)单片机有32个通用I/O口,分为PA、PB、PC和PD四组,每组都是8位。这些I/O 口都可以通过各自的端口寄存器设置成输入和输出(即作为普通端口使用),有些I/O口还具有第二功能(我们在后面使用到这些第二功能时再介绍)。 ATmega16(L)单片机的I/O口在不考虑第二功能时,其基本输入输出功能都是相同的。如图7-1所示为ATmega16(L)单片机I/O口的结构图。每个端口对应3个寄存器,即方向寄存器DDRX(X=A、B、C、D)、端口寄存器PORTX(X=A、B、C、D)、输入引脚PINX(X=A、B、C、D),各个端口的工作状况都可以通过对DDRX、PORTX和PINX的操作来完成。所有的A VR单片机的I/O端口都具有读、写和修改功能。表7-1列出了A Tmega16(L)的I/O端口的组合控制设置。 ATmega16(L)单片机每一组I/O口的所有管脚都可以单独选择上拉电阻。引脚缓冲器可以吸收20mA 的电流,能够直接驱动LED显示。如果设置了弱上拉电阻,当管脚被拉低时,引脚会输出电流。1.DDRX DDRX为端口方向寄存器。当DDRX的某一位置1时相应引脚作为输出使用。反之,当DDRX的某一位置0时,对应的引脚单片机培训作为输入使用。 例如: DDRB=0xF0;//此语句将PB端口的PB0~PB3位设为输入,而PB4~PB7位设为输出。2.PORTX PORTX为端口数据寄存器。 如果引脚设为输出,则对PORTX进行写操作即改变引脚的输出值。

端口扫描报告

杭州电子科技大学软件学院网络工程试验报告 端口扫描报告 09109146 王子龙

1.端口及端口扫描技术简介 (2) 2.对现有端口扫描工具程序的理解 (2) 主界面 (3) 3.核心代码 (6) 4.个人总结 (13) 1.端口及端口扫描技术简介 根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。对应这两种协议的服务提供的端口,也就分为TCP 端口和UDP端口。 一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。主机不只是靠IP地址来区分网络服务,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。 一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。 在手工进行扫描时,需要熟悉各种命令。对命令执行后的输出进行分析。用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能。 通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。 2. 对现有端口扫描工具程序的理解 该程序是有C++编写的。C++是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。 该程序能够扫描主机IP的某一个端口,或者是扫描该主机IP某一范围内的端口。并且提供多次扫描功能。如果要扫描的端口很多,在扫描过程中可以暂停扫描。扫描结果在界面的下方显示。主要显示内容有IP地址、端口号、端口状态、连接次数及备注。

语文素养冰山模型

语文素养冰山模型(熊生贵) 启明按:这篇文章是2013年北京市语文高考状元孙婧妍所写,孙同学深入浅出地给我们讲述了她是如何学习语文的,道出了语文学习的真谛。启明看完这篇文章后觉得做事也好,为学也罢,要想取得成功,没有什么捷径,只有踏踏实实地去做才能出类拔萃。启明虽然愚钝,但是一直对书法有兴趣,常常听人介绍一个名家时说此人“遍临诸帖”,我想这和本文中孙婧妍所提到的“博览群书”是一个道理,因为有海量的课外阅读做基础,所以她能够做到在做阅读题是直接切中要害,写作文时更是名人轶事成语典故信手拈来,由此可知,很多事情,只有深深地扎进去,才能真正做到融会贯通,运用自如。 本文原题叫做《语文漫谈》,启明是从前学而思语文老师张禾强(江湖人称“土鳖”)所创办的心灵之翼论坛转载过来,因为是培训机构,所以在论坛出现时题目变成了“语文148分是这样炼成的”,略显功利。希望大家在阅读时忽略这里的148分是怎样来的,而重点感受“语文素养”的养成过程。希望大家有耐心读完,好东西从来不属于浅尝辄止的人。 全文如下: 【土鳖注】在语文学习开始之前,我们必须认识的一些知识。土鳖读了之后,很是受到感动和鼓舞。一个掌握了语文真谛的孩子,以自己的人生经历来告诉世人,语文是怎样学好的。如此善举,也是语文的真谛。感谢王雨薇同学向土鳖推荐本文。

(应两拨人之邀写的文章,供需要的人没事时当消遣读。) A-开篇 我高考语文考了148分的消息传开后,我发现了一个很奇怪的现象:在所有学弟学妹、亲戚朋友的问话中,被问得最多的问题不是“你是不是很爱读书”,也不是“你是不是很爱写作”,而是,“你是不是做了很多题”。 听了这样的问题,我很诧异,因为在我心中,语文从来是一个有关素养、无关应试的学科。 这是一件奇怪的事:似乎在我们的教育中,任何学科只要和考试扯上关系,那么它往往就会走向应试;而对于这个学科的佼佼者,人们普遍的第一反应也不是他有天赋或者他有素养,而是他一定做了异常多的题目、接受了异常多的训练。拿语文来说,在应试观念的影响下,很少有人会去注意语文这个学科本身的宏大、它内在的韵律与美感。大家在注意什么呢?分数——或者说,能拿到分数的方法。 对这种观念,我感到难过且可惜,因为我热爱语言、热爱文学,我希望更多的人能去注意到中文的博大精深与多姿多彩,而不是戴着功利眼镜去审视它。“花同样的时间去练习的话,语基和作文提高不了几分,但数学我可以多做出一道题”,这样功利的想法扼杀了多少发现语文之美的机会,也因而使世界失去了多少潜在的国学、语言、文学大师,我不愿、不敢去想。 当然,对于语文这个学科,分数与素养是有关系的,但是这种关系是一种单方向的关系。分数高的人,他的素养不一定好,他只是掌握了特定某种类型的试卷需要的东西,而那类试卷之外,或许他是空白的;而有着相当语文素养的学生,他的试卷分数一定不会差,因为他有着足够的积累,那些积累足够他挥洒任意一张试卷了。【土鳖注:素养低分数高的人通常偶尔高分,是运气使然,其成绩极不稳定,不要作为模仿的榜样,否则会很惨。】 也就是说,如果要选择一个作为教育目标的话,那么,我认为培养高素养的学生比培养高分数的学生更重要。无论是对于学生的未来还是学校的教学目标,素养永远比单纯的分数要可靠得多。 说了很多话,还没有说到我理解中的素养。在现在的教育模式下,其实一个学生有没有语文素养是很难看出来的。试卷有着固定的标准答案,一个凭死记硬背做出题的学生和凭自己发挥做出题的学生,在答案中是看不出来的,结果只是大家都拿了满分而已。那么,什么样的学生我会觉得他是有语文素养呢? 这就要回到开篇的两个问题:读书和写作。我认为一个有素养的学生,应该是会读书、会写作的学生。 B-关于读书

单片机IO口定义

单片机I/O口定义 I/O端口又称为I/O接口,也叫做I/O通道或I/O通道。I/O端口是MCS-51单片机对外部实现控制和信息交换的必经之路,是一个过渡的集成电路,用于信息传送过程中的速度匹配和增强它的负载能力。I/O端口右串行和并行之分,串行I/O端口一次只能传送一位二进制信息,并行I/O端口一次可以传送一组(8位)二进制信息。 并行I/O端口 8051有四个并行I/O端口,分别命名为P0、P1、P2和P3,在这四个并行I/O端口中,每个端口都有双向I/O功能。即CPU即可以从四个并行I/O端口中的任何一个输出数据,又可以从它们那里输入数据。每个I/O端口内部都有一个8位数据输出锁存器和一个8位数据输入缓冲器,四个数据输出锁存器和端口号P0、P1、P2和P3同名,皆为特殊功能寄存器SFR中的一个。因此,CPU数据从并行I/O端口输出时可以得到锁存,数据输入时可以得到缓冲。 四个并行I/O端口在结构上并不相同,因此它们在功能和用途上的差异较大。P0口和P2口内部均有一个受控制器控制的二选一选择电路,故它们除可以用作通用I/O口外,还具有特殊的功能。例如:P0可以输出片外存储器的低八位地址码和读写数据,P2口可以输出片外存储器的高八位地址码,等等。P1口常作为通用I/O口使用,为CPU传送用户数据;P3口除可以作为通用I/O口使用外,还具有第二功能。在四个并行I/O端口中,只有P0口是真正的双向I/O口,故它具有较大的负载能力,最多可以推动8个LSTTL门,其余3个

I/O口是准双向I/O口,只能推动4个LSTTL门。 四个并行I/O端口作为通用I/O使用时,共有写端口、读端口和读引脚三种操作方式,写端口实际上是输出数据,是把累加器A或其他寄存器中的数据传送到端口锁存器中,然后由端口自动从端口引脚线上输出。读端口不是真正的从外部输入数据,而是把端口锁存器中的输出数据读到CPU的累加器A中。读引脚才是真正的输入外部数据的操作,是从端口引脚线上读入外部的输入数据。端口的上述三种操作书架上是通过指令或程序来实现的。 串行I/O端口 8051有一个全双工的可编程串行I/O端口。这个串行I/O端口既可以在程序控制下把CPU中的8位并行数据编程串行数据逐行从发送数据线TXD发送出去,也可以把RXD线上串行接收到的数据变成8位并行数据送给CPU,而且这种串行发送和串行接收可以单独进行,也可以同时进行。 8051串行发送和串行接收利用了P3口的第二功能,即它利用P3.1引脚作为串行数据的发送线TDX和P3.0引脚作为串行数据的接收线RXD,串行口I/O口的电路结构还包括串行口控制寄存器SCON,电源及波特率选择寄存器PCON和串行数据缓冲器SBUF等,它们都属于SFR(特殊功能寄存器)。其中,PCON和SCON用于设置串行口工作方式和确定数据的发送和接收波特率,SBUF实际上有两个8位寄存器组成,一个工作方式和确定数据的发送和接收比特率,另一个用于存放接收到的数据,起着数据的缓冲作用。

基于多线程的端口扫描程序课程设计报告

滁州学院 课程设计报告 课程名称: 设计题目:基于多线程的端口扫描程序 院部:计算机与信息工程学院 专业:网络工程 组别:第六组 起止日期: 2012 年12月31日~2013 年1月6日指导教师: 计算机与信息工程学院二○一二年制

课程设计任务书 目录 1 需求分析. 0 1..1 网络安全 0 1.2 课程背景 0 1.3 扫描器 0 1.4 多线程扫描器介绍 (1) 错误! 未定义书签。

错误! 未定义书签。 错误! 未定义书签。 错误! 未定义书签。 1.5 端口扫描 (2) 2 概要设计. (3) 2.1 整体框架设计 (3) 2.2 流程图描述 (3) 3 详细设计. (3) 3.1 端口扫描线程启动 (3) 3.2 GUI 图形界面 (5) 3.3 按钮监听及异常处理 (6) 4 调试与操作说明. (8) 4.1 运行界面 (8) 4.2 扫描结果 (8) 4.3 错误提示 (8) 5 课程设计总结与体会. (8) 6 参考文献. (9) 7 致谢. (9) 8 附录. 0 1 需求分析 1..1 网络安全二十一世纪是信息化、网络化的世纪,信息是社会发展的重要资源。信息安全保障能力是一个国家综合国力、经济竞争实力和生存能力的重要组成部分,是世界各国在奋力攀登的制高点。网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行。网络安全包括技术领域和非技术领域两大部分: 非技术领域包括一些制度、政策、管理、安全意识、实体安全

等方面的内容; 技术领域包括隐患扫描、防火墙、入侵检测、访问控制、虚拟专用网、CA 认证、操作系统等方面的内容。这些技术的目标是保证信息的可控性、可用性、保密性、完整性、和不可抵赖性。端口扫描属于安全探测技术范畴,对应于网络攻击技术中的网络信息收集技术。 1.2 课程背景 随着Internet 的不断发展,信息技术已成为促进经济发展、社会进步的巨大推动力。端口扫描技术是网络安全扫描技术一个重要的网络安全技术。与防火墙、入侵检测系统互相配合,能够有效提高网络的安全性。安全扫描是安全技术领域中重要的一类。通过扫描能自动检测远端或本地主机系统信息,包括主机的基本信息(如计算机名、域名、组名、操作系统 型等)、服务信息、用户信息以及漏洞信息,它的重要性在于能够对网络进行安全评估,及时发现安全隐患,防患于未然。 网络的安全状况取决于网络中最薄弱的环节,任何疏忽都有可能引入不安全的因素,最有效的方法是定期对网络系统进行安全分析,及时发现并修正存在的脆弱,保证系统安全。 国外安全扫描技术的历史可以追溯到20 世纪90 年代,当时因特网刚刚起步,但是在过去的十年内,扫描技术飞速发展,迄今为止,其扫描技术已经非常完善,但是在全面性,隐蔽性和智能性上还有待提高。安全扫描从最初专门为UNIX 系统而编写的一些只有简单功能的小程序发展到现在,已经出现了可以运行多个操作系统平台上的,具有复杂功能的系统程序。 国内的扫描技术是在国外的扫描器基础上发展起来的。其中有一些专门从事安全技术的公司。这些公司的扫描器以硬件为主,其特点是执行速度快,不像软件一样受到安装主机系统的限制。 然而对于更多的基于主机的端口扫描而言,简单,实用,可靠才是它们的长处。 1.3 扫描器扫描器是一种自动检测远程或本地主机安全性弱点的程序,通过使用扫描器你可以不留痕迹的发现远程服务器的各种TCP端口的分配。这就能让我们间接的或直观的了解到远程主机所存在的安全问题。为了保证网络中计算机的安全性,必须采取主动策略, 快速、及时、准确、安全的检测出网络中计算机及防火墙开放的和未开放的端口。计算机端口扫描技术就是这种主动防御策略实现的重要技术手段。 扫描器采用模拟攻击的形式对目标可能存在的已知安全漏洞进行逐项检查。目标可以是工作站、服务器、交换机、数据库应用等各种对象。然后根据扫描结果向系统管理员提供周 密可靠的安全性分析报告,为提高网络安全整体水平产生重要依据。在网络安全体系的建设中,安全扫描工具花费低、效果好、见效快、与网络的运行相对对立、安装运行简单,可以大规模减少安全管理员的手工劳动,有利于保持全网安全政策的统一和稳定。 1.4 多线程扫描器介绍 在java 中,组件放置在窗体上的方式是完全基于代码的。组件放置在窗体上的方式通常不是通过绝对坐标控制,而是由“布局管理器”根据组件加入的顺序决定其位置。每个容器都有一个属于的自己布局管理器。使用不同的布局管理器,组件大小,位置和形状将大不相同。表格型布局管理器将容器划分成为一个多行多列的表格,表格的大小全部相同,是由其中最大的组件所决定。通过add 方法可以将组件一一放在每个表格

IO端口复用的几种方式

IO端口复用 简介 I/O多路复用(multiplexing):本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。 适用场景:高并发的服务器端。应对并发,常见的思维是创建多线程,每个线程管理一个并发操作,但是弊端很明显,就是多线程需要上下文切换,这个切换的消耗太大,当连接的客户端很多的时候弊端就很突出了。所示使用单线程的多路复用。 几种方式 1.s elect Linux提供的select相关函数接口如下: #include #include int select(int max_fd, fd_set *readset, fd_set *wri teset, fd_set *exceptset, struct timeval *timeout) FD_ZERO(int fd, fd_set* fds) /* 清空集合 */ FD_SET(int fd, fd_set* fds) /* 将给定的描述符加入集合 */ FD_ISSET(int fd, fd_set* fds) /* 将给定的描述符从文

件中删除 */ FD_CLR(int fd, fd_set* fds) /* 判断指定描述符是否 在集合中 */ 接口解释: 1:select函数的返回值就绪描述符的数目,超时时返回0,出错返回-1。 2:第一个参数max_fd指待测试的fd个数,它的值是待测试的最大文件描述符 加1,文件描述符从0开始到max_fd-1都将被测试。 3:中间三个参数readset、writeset和exceptset指定要让内核测试读、写和异 常条件的fd集合,如果不需要测试的可以设置为NULL。 代码演示: sockfd=socket(AF_INET,SOCK_STREAM,0); memset(&addr,0,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(2000); addr.sin_addr.s_addr=IN ADDR_ANY; bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)); listen(sockfd,5); fd_set rset; int max = 0; int fds[5]; for(int i=0;i<5;i++) { memset(&client,O,sizeof(client); addrlen=sizeof(client); fds[i]=accept(sockfd,(struct sockaddr*) &client,&addrlen); if(fds[i]>max) max=fds[i]; } while(1)

冰山模型的启示

冰山模型的启示 这里是对一座冰山的描写,“在湛蓝的天幕下,在浩渺的海洋上,在阳光的照射中,冰山宛若一座巨型的汉白玉雕成的海上宫殿,晶莹剔透,绚丽多姿。它动人心魂,给人带来无尽的遐想和憧憬,那迷幻般的色彩和造型,如诗、如画,它是大自然最杰出的艺术品之一。” 然而,让人惊异的是,我们看到的这美丽的景色,却不是冰山的全部,潜水人员经过详细的海底调查,得到了一座冰山的全幅画面,看下图:

冰山的这一特征被心理学家用来比拟人心,俗话说“人心不同,各如其面”,每个人看来千差万别,都有自己的闪光点和不足之处,正如南极洲海面上形态各异的冰山。对于每一个人来讲,我们观察到的这些其实只是冰山之上的东西,即外显的知识和技能。而看不到的冰山之下的东西却更加丰富和强大,那是一个人的动机、个性特点、自我概念和社会角色等。前者受到后者的制约,而决定人的本质的也正是我们看不到的部分。冰山之上的东西我们可以通过知识技能考试,知道每个人的优劣;而要想了解冰山之下的东西,则不太容易,因为它是深藏的,内隐的,需要借助心理学家研究开发的心理测评工具和科学的人才测评技术。 拿企业招聘来说,某银行营业部采用业务知识考试的方法,招聘了两位金融专业毕业的大学生做银行柜员。在后续跟踪调查过程中发

现,甲银行柜员工作效率非常高,而乙柜员却差强人意。我们问主管在他看来是什么原因。他说甲掌握银行政策比较全面,在为客户办理业务的过程中就不会因临时查阅资料而耽误客户的时间。其个人对学习银行业务有兴趣,他们愿意学习新东西,进取的动力很高。而乙柜员则与之不同,只是按照既定的要求做好应该完成的工作。专业知识考试表明两个人在知识上没有差别,也就是冰山之上的部分看来差不多。而这两个人个性和动机特点不同,所以在后来的工作中出现了明显的差异。 银行在人才选拔与招聘过程中,为了使优秀人才脱颖而出,往往采取我们常说的“考试”的方式。这倒是一种公平的选人方式,但考试应该考什么?是我们需要考虑的一个重要问题。按照冰山模型,要想全面的了解一个人,除了进行银行知识考试之外,应进一步测评每个人更深层次的素质特点,如动机特点、个性特征等,这些特点更大程度决定每个人的发展潜力。 冰山模型还给我们一个启示:一个人的成功不仅仅是知识技能的掌握,而是一个全方面的深度修炼。修炼的路线可能是:思想决定行为,行为决定习惯,习惯决定性格,性格决定命运。

端口扫描器的设计与实现

河南理工大学 计算机科学与技术学院课程设计报告 2015— 2016学年第一学期 课程名称网络与信息安全 设计题目端口扫描器的设计与实现姓名范腾飞 学号311309040113 专业班级网络1301 指导教师叶青 2016 年 1 月16 日

目录 一.课程设计的目的........................................................ 二.课程设计的要求........................................................ 三.端口扫描器相关知识................................................. 3.1:端口的基本概念............................................... 3.2:常见的端口介绍............................................... 3.3:端口扫描器基本原理....................................... 3.4:端口扫描常用技术........................................... 四.实验流程.................................................................... 4.1:基本步骤............................................................. 4.2:主要函数............................................................... 4.3流程图..................................................................... 五.实验结果..................................................................... 六.总结........................................................................

io端口与中断

I/O端口基本知识 (2010-03-06 09:20:50) 转载 1.什么是I/O端口? CPU使用什么指令与外设进行数据交换? 答:CPU与I/O设备通过硬件接口或控制器相连接,这些接口或控制器都有数量不等的端口,这些端口有统一的地址编码,CPU通过这些端口使用输入输出指令IN、OUT与外设进行数据交换。 2.CPU为什么不能用MOV指令进行I/O数据传输? 答:在80x86微机系统中,I/O端口编址在一个独立的地址空间中,它和存储器是完全分离的。因此,对于存储器的存取操作使用MOV指令,而与端口进行信息交换的操作使用专门的I/O指令,二者不能混淆。 3.使用查询方式进行输入输出的优缺点是什么? 答:使用查询方式编程可直接在端口级上输入输出信息,数据的传送速度和吞吐量比较高,另外在控制多个设备的I/O时,可在程序中安排它们的优先级,最先查询的设备,其工作的优先级也最高。修改程序中的查询次序,实际上也就修改了设备的优先级,这样以最简便的方法实现了对设备优先级的控制。查询方式的缺点主要是在查询过程中,要反复的查询等待,浪费了CPU原本可执行大量指令的时间,而且由询问转向相应的处理程序的时间较长,尤其在设备比较多的情况下。 4.什么是中断? 答:计算机在执行程序过程中,遇到需要处理的事件时,暂停当前正在运行的程序,转去执行有关的服务程序,处理完后自动返回原程序,这个过程称为中断(interrupt)。中断在现代计算机系统中是一种非常重要的技术,输入输出设备和主机交换数据、分时操作、实时系统、多处理机系统、计算机网络和分布式计算机系统都要用到这种技术。 5.中断分为几类? 答:中断可分为内中断和外中断。内中断是由计算机内部原因引起的中断,内中断又称为软中断,它通常由三种情况引起: (1) 由中断指令INT引起;

冰山模型来源、理论及启示

1895年,弗洛伊德与他人合作发表了《歇斯底里研究》,“冰山理论”从此走上了心理学的舞台。该理论认为,人格可见的只是浮在水面的部分,看不见的却是冰山下那巨大的部分,正是这看不见的水下部分决定着人类的行为(包括厚道、奸诈、人际斗争等),看不见的水下部分是人格冰山的基础。 “冰山理论”后来被广泛地应用于能力素质模型建设中,一直到1973年心理学家麦克利兰提出了“能力素质冰山模型”。能力素质冰山模型认为,支持一个人取得业绩的能力素质模型由6个要素构成: 1、知识:个人在某一特定领域所拥有的事实型和经验型信息。 2、技能:个人结构化地运用知识来完成某项具体工作的能力。 3、社会角色:个人基于态度和价值观的行为方式与风格。 4、自我概念:个人态度、价值观和自我印象。 5、特质:个性身体特征对环境和各种信息所表现出来的持续发应。 6、动机:个人对某种事物的持续渴望,进而付诸行动的内驱力。 其中第1、2项大部分与工作所要求的直接资质相关,我们能够在比较短的时间使用一定的手段进行测量。可以通过考察资质证书、考试、面谈、简历等具体形式来测量,也可以通过培训、锻炼等办法来提高这些素质。第3、4、5、6项往往很难度量和准确表述,又少与工作内容直接关联。只有其主观能动性变化影响到工作时,其对工作的影响才会体现出来。考察这些方面的东西,每个管理者有自己独特的思维方式和理念,但往往因其偏好而有所局限。招聘人才时,不能仅局限于对技能和知识的考察,而应从应聘者的求职动机、个人品

质、价值观、自我认知和角色定位等方面进行综合考虑。如果没有良好的求职动机、品质、价值观等相关素质的支撑,能力越强、知识越全面,对企业的负面影响会越大。 基于能力冰山模型,有学者也从特征的角度提出了“素质冰山模型”。素质冰山模型把个体素质形象地描述为漂浮在洋面上的冰山,其中知识和技能是属于裸露在水面上的表层部分,这部分是对任职者基础素质的要求,但它不能把表现优异者与表现平平者区别开来,这一部分也称为基准性素质。基准性素质是容易被测量和观察的,因而也是容易被模仿的;换言之,知识和技能可以通过针对性的培训习得。内驱力、社会动机、个性品质、自我形象、态度等属于潜藏于水下的深层部分的素质,这部分称为鉴别性素质。它是区分绩效优异者与平平者的关键因素;职位越高,鉴别性素质的作用比例就越大。相对于知识和技能而言,鉴别性素质不容易被观察和测量,也难于改变和评价,这部分素质很难通过后天的培训得以形成。 小启示:1、冰山模型的这两部分性质就类似于能量、能力的概念,能量是与生俱来的,而能力是后天培养的。把能量用弹簧来比作的话,有的人可能只有几十公分,有的可能长达几公里,而且能量也有多种属性。冰山之下的性质各有不同而且难以测量,这也就要求我们认真的把合适的人放到合适的位置上去,让“能量”发挥到极致。对于自己来讲,也要做到自知,积极寻求适合自己的方向。2、一个人的成功不仅仅是知识技能的掌握,而是一个全方面的深度修炼。修炼的路线可能是:思想决定行为,行为决定习惯,习惯决定性格,性

简单端口扫描器java的设计与实现

简单端口扫描器java的设计与实现 IPScan类的实现 package scan.pratice; import https://www.doczj.com/doc/5411356119.html,.InetAddress; import https://www.doczj.com/doc/5411356119.html,.Socket; import https://www.doczj.com/doc/5411356119.html,.UnknownHostException; import java.util.ArrayList; import java.util.ListIterator; public class IPScan { static long startTime=System.currentTimeMillis(); //获取开始时间 public static void main(String[] args) { if(args.length !=2){ System.out.println("参数不对"); } int startIP = Integer.parseInt(args[0]); //获得起始IP,因为args[]是String类型,所以要强制转换成int类型 int endIP = Integer.parseInt(args[1]); //获得终止IP,同上 ArrayList result = new ArrayList(); //ip地址扫描 for(int id=startIP;id<=endIP;id++){ String addres= "10.28.23."; try { Socket s=new Socket(addres+id,8000); //建立连接 } catch (UnknownHostException e ) { }catch(Exception e){ //System.out.println(e.toString()); if(e.toString().endsWith("https://www.doczj.com/doc/5411356119.html,.ConnectException: Connection timed out: connect")){ System.out.println(addres+id+":not exist."); }else{

相关主题
文本预览
相关文档 最新文档