Java基础知识笔记(六:网络程序设计)
一、统一资源定位地址(URL)
(1)网络地址
在网络上,计算机是通过网络地址标识。网络地址通常有两种表示方法,第一种表示方法通常采用4个整数组成,例如:
166.111.4.100表示某一网站服务器的主页地址。
第二种方法是通过域名表示网络地址,例如:
在网络程序中,可以用类java.net.InetAddress的实例对象来记录网络地址,并获取一些相关的信息。因为类java.net.InetAddress的构造方法的访问属性是默认模式,所以通常不能通过类java.net.InetAddress的构造方法来创建其实例对象。要创建leijava.net.InetAddress的实例对象可以通过它的成员方法:
public static InetAddress getLocalHost() throws UnknowHostException创建本地计算机所对应的类java.net.InetAddress的实例对象。
(2)统一资源定位地址
统一资源定位地址(Uniform Resource Locator,URL),在有些资料中也称作网络资源定位器,它一般指向网络上的资源。网络资源不仅可以包括网络上各种简单对象,例如,网络上的路径和文件等,还可以是一些复杂的对象,如数据库或搜索引擎。统一资源定位地址(URL)通常是由若干个部分组成,其中,常用的有协议(Protocol)、主机(Host)、端口号(Port)、文件(File)和引用(Reference)等。这几个部分在统一资源定位地址(URL)中的书写格式及排列顺序通常为:
协议://主机:端口号/文件#引用
(3)通过统一资源定位地址获取网络资源
统一资源定位地址(URL)指向在网络上的资源。通过类java.net.URL的成员方法
Public final InputStream openStream() throws IOException,可以将类URL的实例对象与它所指向的资源建立起关联,从而可以将该网络资源当作一种特殊的数据流。常用的读取网络资源数据的步骤如下:
1)创建类URL的实例对象,使其指向给定的网络资源;
2)通过类URL的成员方法openStream建立起URL连接,并返回输入流对象的引用,以便读取数据;
3)可选步骤,通过java.io.BufferedInputStream或java.io.BufferedReader封装输入流;
4)读取数据,并进行数据处理;
5)关闭数据流。
其中步骤3)是可选步骤,当网络不稳定或者速度很慢时,通过步骤3)可以提高获取网络资源数据的速度。
二、基于TCP的网络程序设计
TCP(Transmission Control Protocol,传输控制协议)是一种基于连接的协议,可以在计算机之间提供可靠的数据传输。一个形象的比喻是将通过TCP传输数据比作打电话,即先建立起链接通道,再传输数据。连接通道的两端通常称为套接字(Socket)。套接字(Socket)就好像是在打电话时所需要的电话筒。在拨通电话后,可以通过电话筒向对方说话,也可以听到对方所说的话。基于TCP的网络通信也是如此,先建立起连接,再通过套接字(Socket)发送数据和接收数据。
通过TCP进行通信的双方通常称为服务器端和客户端。服务器端和客户端可以是两台不同的额计算机,也可以是同一台计算机。服务器端的程序与客户端的程序稍微有些不同,具体的通信程序设计如下图所示:

三、基于UDP的网络程序设计
UDP(User Datagram Protocol,用户数据报协议)是一种控制网络数据传输的协议。传输的数据首先封装在数据报包中,然后通过UDP控制数据报包的发送和接收。与TCP相比,UDP在控制数据传输时并没有建立起可靠的连接。通常将基于UDP的数据传输比喻为到邮局寄信或取信件。相对于TCP而言,一般认为UDP是一种简单的不可靠的无连接的网络数据传输协议。基于UDP的网络数据传输并不保证数据报包会顺利到达指定的主机,也不保证数据报包会按照发送的顺序到达指定的主机。
在日常生活中,可以通过邮局寄信或取信。与此相类似,基于UDP的网络数据传输要通过数据报套接字(Datagram Socket)。数据报套接字是表示发送或接收数据报包的套接字。它在数据通信中的作用有点类似于邮局。需要传输的数据通常封装成数据报包,这有点类似于各自信件。
通过UDP进行网络数据通信的程序设计模型如下图所示(这个模型既适用于服务器端,
也适用于客户端。不过在具体实现上有细微差别):

Java基础知识笔记(六:网络程序设计)的更多相关文章
- java基础知识-笔记整理
1.查看已安装jdk文件路径 CMD输入java -verbose. 2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...
- Java基础知识强化之网络编程笔记18:Android网络通信之 使用HttpClient的Post / Get 方式读取网络数据(基于HTTP通信技术)
使用HttpClient进行Get方式通信,通过HttpClient建立网络链接,使用HttpGet方法读取数据,并且通过Response获取Entity返回值. 使用HttpClient进行Post ...
- Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)
使用Http的Post方式与网络交互通信.Post方式需要向网络传输一部分数据,同时具有输入流和输出流. 详见:Android(java)学习笔记210:采用post请求提交数据到服务器(qq登录案例 ...
- Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)
使用Http的Get方式读取网络数据,使用Get方式与网络通信是最常见的Http通信,建立链接之后就可以通过输入流读取网络数据. 详见:Android(java)学习笔记209:采用get请求提交数据 ...
- Java基础知识笔记(一:修饰词、向量、哈希表)
一.Java语言的特点(养成经常查看Java在线帮助文档的习惯) (1)简单性:Java语言是在C和C++计算机语言的基础上进行简化和改进的一种新型计算机语言.它去掉了C和C++最难正确应用的指针和最 ...
- Java基础知识强化之网络编程笔记23:Android网络通信之 Volley(Google开源网络通信库)
联合网上资料学习:http://www.open-open.com/lib/view/open1451223702339.html 一.Volley的介绍 1. Volley简介 在这之前,我们在程序 ...
- Java基础知识强化之网络编程笔记01:InetAddress类的概述和使用
1. InetAddress类 InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress,包括ServerSocket,Socket,Datagr ...
- Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)
1. Future接口简介 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API ...
- Java基础知识强化之网络编程笔记24:Android网络通信之 AndroidAsync(基于nio的异步通信库)
1. AndroidAsync AndroidAsync 是一个基于nio的异步socket ,http(客户端服务器端),websocket,socket.io库,AndroidAsync 是一 ...
随机推荐
- 短线技术MACD指标图解
1.通常DIF上穿0轴线的当天是中长线难得第一次买入的好时机,会引起场外资金的关注,如果上穿后MACD没有调头的迹象,则股价回调到5日均线附近为买入的好时机,必要时参考其他指标追涨.在0轴线以上形成2 ...
- [大数据之Sqoop] —— Sqoop初探
Sqoop是一款用于把关系型数据库中的数据导入到hdfs中或者hive中的工具,当然也支持把数据从hdfs或者hive导入到关系型数据库中. Sqoop也是基于Mapreduce来做的数据导入. 关于 ...
- vmware 虚拟机通信拿不到 inet addr 的解决办法
我在虚拟机上安装完红帽之后,使用ifconfig命令来看网卡的IP,但是,输入命令之后,eht0里面只有 inet6 addr 而没有 inet addr,不多说,上图. 解决办法如下:打开 虚拟机设 ...
- C#设计模式-装饰者模式
在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜,手机挂件,手机外壳等,如果此时利用继承来实现的话,就需要定义无数的类,如StickerPhone(贴膜是手机类).Access ...
- iOS-App发布证书的申请与使用
i开发环境:xcode5.1.1 iphonesdk:7.1 开发机器:iMac 真机部署测试:apple个人开发者ID 向导: 必备IDP证书和distribution证书(第一个证书是真机部署测试 ...
- KnockoutJS 3.X API 第七章 其他技术(6) 使用“fn”添加自定义函数
有时,您可能会通过向Knockout的核心值类型添加新功能来寻找机会来简化您的代码. 您可以在以下任何类型中定义自定义函数: 因为继承,如果你附加一个函数到ko.subscribable,它将可用于所 ...
- JAVA集合
为了保存数量不确定的数据或者提供映射关系的数据,Java提供了集合类,也称作集合类,Collection和Map分别为两个根接口.两个接口体系的继承系如下图 (图片来源于网络) Collection接 ...
- Ado net Source 用法
Ado net Source 是用于获取数据源的,使用的connection manager是 ado net connection. Ado Net Source 的Data Access Mode ...
- C#一探究竟——枚举
枚举是值类型而System.Enum却是引用类型的原因 Q:在C#里,我们如何表达枚举类型? A:你可以使用enum关键字(keyword)来声明一个枚举类型(enum type): // Cod ...
- C指针(一)
原文链接:http://www.orlion.ga/916/ 一.指针的基本操作 例: int i; int *pi = &i; char c; char *pc = &c; &quo ...