网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。html
路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控制等,经过光纤、网线等链接将设备链接起来,从而造成了一张巨大的计算机网络。
共享 网络最主要的优点在于共享:共享设备和数据,如今共享设备最多见的是打印机。java
对于网络编程来讲,最主要的是计算机和计算机之间的通讯,这样首要的问题就是如何找到网络上的计算机呢?这就须要了解IP地址的概念。网络中的每一个设备都会有一个惟一的数字标识,这个就是IP地址。在计算机网络中,如今命名IP地址的规定是IPv4协议,该协议规定每一个IP地址由4个0-255之间的数字组成,例如10.0.120.34。每一个接入网络的计算机都拥有惟一的IP地址,这个IP地址多是固定的,也能够是动态的。编程
因为IP地址不容易记忆,因此为了方便记忆,有创造了另一个概念——域名(Domain Name),例如sohu.com等。一个IP地址能够对应多个域名,一个域名只能对应一个IP地址。在网络中传输的数据,所有是以IP地址做为地址标识,因此在实际传输数据之前须要将域名转换为IP地址,实现这种功能的服务器称之为DNS服务器,也就是通俗的说法叫作域名解析。IP地址的使用要比域名通用一些。浏览器
有了端口的概念之后,在同一个计算机中每一个程序对应惟一的端口,这样一个计算机上就能够经过端口区分发送给每一个端口的数据了,换句话说,也就是一个计算机上能够并发运行多个网络程序,而不会在互相之间产生干扰。有了IP地址和端口的概念之后,在进行网络通信交换时,就能够经过IP地址查找到该台计算机,而后经过端口标识这台计算机上的一个惟一的程序。这样就能够进行网络数据的交换了。服务器
网络通信基于“请求-响应”模型。在网络通信中,第一次主动发起通信的程序被称做客户端(Client)程序,简称客户端,而在第一次通信中等待链接的程序被称做服务器端(Server)程序,简称服务器。一旦通信创建,则客户端和服务器端彻底同样,没有本质的区别。网络
网络编程中的两种程序就分别是客户端和服务器端。这种网络编程的结构被称做客户端/服务器结构,也叫作Client/Server结构,简称C/S结构;使用浏览器做为客户端的结构被称做浏览器/服务器结构,也叫作Browser/Server结构,简称为B/S结构。总之C/S结构和B/S结构是如今网络编程中常见的两种结构,B/S结构其实也就是一种特殊的C/S结构。P2P程序中既包含客户端程序,也包含服务器端程序。并发
编写协议格式呢?答案是随意。只要按照这种协议格式可以生成惟一的编码,按照该编码能够惟一的解析出发送数据的内容便可。在实际的网络程序编程中,最麻烦的内容不是数据的发送和接收,由于这个功能在几乎全部的程序语言中都提供了封装好的API进行调用。tcp
网络通信的方式主要有两种: 在网络通信中,TCP方式就相似于拨打电话,使用该种方式进行网络通信时,须要创建专门的虚拟链接,而后进行可靠的数据传输,若是数据发送失败,则客户端会自动重发该数据。而UDP方式就相似于发送短信,使用这种方式进行网络通信时,不须要创建专门的虚拟链接,传输也不是很可靠,若是发送失败则客户端没法得到。因为TCP须要创建专用的虚拟链接以及确认传输是否正确,因此使用TCP方式的速度稍微慢一些,并且传输时产生的数据量要比UDP稍微大一些。论使用TCP方式仍是UDP方式进行网络通信,网络编程都是由客户端和服务器端组成。编程语言
客户端的编程主要由三个步骤实现:一、 创建网络链接二、 交换数据三、 关闭网络链接学习
服务器端的编程步骤和客户端不一样,是由四个步骤实现,依次是:一、 监听端口二、 得到链接三、 交换数据四、 关闭链接
和网络编程有关的基本API位于java.net包中,该包中包含了基本的网络编程实现,该包是网络编程的基础。该包中既包含基础的网络编程类,也包含封装后的专门处理WEB相关的处理类
一个基础的网络类——InetAddress类。该类的功能是表明一个IP地址,而且将IP地址和域名相关的操做方法包含在该类的内部。在Java语言中,对于TCP方式的网络编程提供了良好的支持,在实际实现时,以java.net.Socket类表明客户端链接,以java.net.ServerSocket类表明服务器端链接。
屡次数据交换那么如何实现创建一次链接,进行屡次数据交换呢?其实很简单,创建链接之后,将数据交换的逻辑写到一个循环中就能够了。这样只要循环不结束则链接就不会被关闭。按照客户端实现的逻辑,也能够复用服务器端的链接,实现的原理也是将服务器端的数据交换逻辑写在循环中便可,
UDP方式UDP方式的网络编程也在Java语言中得到了良好的支持,因为其在传输数据的过程当中不须要创建专用的链接等特色,因此在Java API中设计的实现结构和TCP方式不太同样。固然,须要使用的类仍是包含在java.net包中。
本周的学习咱们学到不少新知识,咱们掌握了大量的基础知识,可是想要把Java知识充分学透,仍是须要不停努力敲代码,在敲代码中学习提升。学习并无什么途径,不停地为之奋斗,一直坚持下去,相信咱们终究可以精通java这门编程语言。学Java不能靠一时的兴趣,而须要咱们不停地探索,才能有必定的收获。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 200/400 | 1/3 | 18/38 | |
第三周 | 200/600 | 1/4 | 22/60 | |
第四周 | 200/800 | 1/5 | 30/90 | |
第五周 | 200/1000 | 1/6 | 30/120 | |
第六周 | 200/1200 | 2/8 | 30/150 | |
第七周 | 400/1600 | 2/10 | 30/180 | |
第八周 | 400/2000 | 2/12 | 30/210 | |
第九周 | 400/2400 | 2/14 | 30/240 | |
第十周 | 400/2800 | 2/16 | 30/280 |