Java网络编程知识

一、前言 本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等。在此基础上,介绍Java中的网络编程,参考另一篇文章:《Java网络编程实战》。 一、概述 二、计算机网络 1.网络协议 2.网络体系结构 三、OSI参考模型 四、TCP/IP参考模型 五、常见网络协议 1.TCP协议 2.UDP协议 3.HTTP协议 六、计网常见问题 七、Java网络编程 一、概述 计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程。下面先对网络编程的一些基础知识进行介绍,最后给出使用Java语言进行网络编程的实例。 二、计算机网络 计算机网络20世纪60年代出现,经历了20世纪70年代、80年代和90年代的发展,进入21世纪后,计算机网络已经成为信息社会的基础设施,深入到人类社会的方方面面,与人们的工作、学习和生活息息相关。 网络协议 如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。…

Continue Reading →

Java网络编程实战

一、前言 Java的网络编程主要涉及到的内容是Socket编程,那么什么是Socket呢?简单地说,Socket,套接字,就是两台主机之间逻辑连接的端点。TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket,本质上就是一组接口,是对TCP/IP协议的封装和应用。 Socket编程主要涉及到客户端和服务器端两个方面,首先是在服务器端创建一个服务器套接字(ServerSocket),并把它附加到一个端口上,服务器从这个端口监听连接。端口号的范围是0到65536,但是0到1024是为特权服务保留的端口号,我们可以选择任意一个当前没有被其他进程使用的端口。客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。 二、实例 1、SocketServer多线程 /* * Copyright (c) 2005, 2019, EVECOM Technology Co.,Ltd. All rights reserved. * EVECOM PROPRIETARY/CONFIDENTIAL.…

Continue Reading →

java基础之加强型for循环与Iterator

引言 从JDK1.5起,增加了加强型的for循环语法,也被称为 “for-Each 循环”。加强型循环在操作数组与集合方面增加了很大的方便性。那么,加强型for循环是怎么解析的呢?同时,这是不是意味着基本for循环就会被取代呢? for(var item:items){//var 代表各钟类型 //相关操作 } 一、数组中的for-each循环 我们先来看一下数组中的 for-Each 循环的使用; String str[]= new String[]{“1″,”2″,”3”}; //普通for循环 for(int i=0;i<str.length;i++){…

Continue Reading →

Java图片采集版本迭代总结

一、版本迭代 1、场景一 采集前几个级别的少量图片(千级),采用单线程单任务V1。 2、场景二 越到后面的层级图片数量越大(万级),减少改动工作量,升级到了单线程分块任务V2,其中分块范围为手动输入。 3、场景三 后面层级的图片数据又跨了一个层级(十万级),由于时间 + 设备有限的限制下,开始采用多线程分块任务V3。 4、场景四 程序挂着跑,一觉醒来发现“凉凉”,由于高频次的采集,导致IP被封禁,访问图片403,百度我的IP,可以查看当前用于访问的公网IP于是结合公司资源和网上技术,采用了动态IP代理进行采集V4。 1、动态IP代理Http与Https代码示例 /* * Copyright (c) 2005, 2019, EVECOM Technology…

Continue Reading →

Java代码中Thread.sleep(0) 的意义

一、问题 你以为你是一个高级工程师,实际上也就只是会用几个框架的API而已!最近代码中出现了一个 Thread.sleep(0),引起了大家的注意。有人说是写错了,有人说是没意义可以删掉!是这样吗?通过本文希望大家看完后有更大的收获! 我们知道 Thread.sleep() 方法能让线程休眠一段时间,但是当这个参数为0,还有意义吗?假设现在的时间是 2018-10-16 18:00:00.000,当我调用一下Thread.sleep(0)后,在2018-10-16 18:00:00.001这个时间当前休眠的这个线程会被唤醒吗? 要回答这个问题,我们先要看 Thread.sleep() 到底做了什么?既然是 Sleep 0 毫秒,那到底休眠了吗? 二、说明 1、任务调度 我们知道处理器是一个操作系统执行任务的工具,线程是一个操作系统执行任务的基本单位,处理器的数量决定了不可能所有线程都能同时得到执行。这就需要通过某种算法来进行任务调度。Unix系统使用的是时间片算法,而Windows 是一个抢占式的多任务操作系统。 关于抢占式,维基百科有下面的定义: In computing, preemption…

Continue Reading →

Java小知识

1、HashSet不会存储重复数据。 2、HashMap本身存储是无序的,LinkedHashMap可以使无序变有序。 HashMap unorder = new HashMap<>(); xxx操作… LinkedHashMap order = new LinkedHashMap<>(); xxx操作… unorder = order;  

Continue Reading →

Java排序算法之冒泡排序

基本思想 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素(相邻),如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 算法描述 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。[第1趟,N-1次比较] 针对所有的元素重复以上的步骤,除了最后一个。[第i趟,N-i次比较] 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。[需走N-1趟] 算法自实现 /** * 描述 Java经典排序算法之冒泡排序 * 1.第1趟:N个数需要N-1次才能找到最大的数. * 2.第i趟:只需比较N-i次,即可最大的数,因经前轮筛选的最大数,无需再比较. * 2.N个数需要走N-1趟,才能全部排序成功.…

Continue Reading →