Java开发教程–qyjohn版 [5]

By , 2004年4月26日 5:18 下午

发信人: qyjohn (Sweet Potato — 清扬婉兮,适我愿兮), 信区: JavaTutorial
标  题: Java开发教程–qyjohn版 [5]
发信站: BBS 水木清华站 (Mon Apr 26 16:05:55 2004), 站内

作业5:网络基础

上周的作业,至今没有交上来的,不知道是不是作业的第二部
分稍微难了一点。麻烦正在做这个作业的网友给个面子,赶紧
把作业交上来,不然的话这个学堂就维持不下去啦。

1   堕入情网

Java语言的一个显著优点就是它从语言的高度上提供了对网络
的支持,使得程序员能够很容易的构建基于网络的应用程序。
在J2SE中提供了多个网络相关的接口和类库,使得程序员能够
轻易的实现几乎是所有的常见网络应用。ServerSocket能够用
来构建基于TCP/IP的服务器程序,Socket能够用来构建基于
TCP/IP的客户端程序,而DatagramPacket以及DatagramSocket
能够用来构建基于UDP 的数据广播程序。在java.net中的其他
Java库还能够被用来实现域名解析、身份认证、安全许可等一
系列功能。不过,在各位能够充分发挥Java语言的如上优势之
前,有必要先介绍一些与TCP/IP相关的基本概念。

IP (Internet Protocol)是一种在多台互相连接的计算机中使
用的基于数据包的通讯协议。在初步学习阶段我们只需要了解
在网络中可以用IP来标志一台计算机,例如说202.112.58.200
就是水木,除非发生重大变革不会变成其他的网站。

TCP (Transmission Control Protocol,传输控制协议) 是一
种基于连接的通讯协议。当两台计算机之间需要进行可靠的数
据传输时,它们通过网络建立起一个稳定的连接,这种连接通
常也被称为数据链。与电话网络相类似,这种数据链是点对点
的,通讯的双方则通过这条数据链来回传输数据。在这条稳定
的数据链的基础上,TCP 协议通过信息校验能够保证接收方所
接收到的数据和发送方所发送的数据在内容和顺序上是完全一
致的,从而实现了数据的可靠传输。

UDP (User Datagram Protocol,用户数据包协议)与TCP 协议
之间的不同在于 UDP 不是一种基于稳定连接的通讯协议。UDP
协议将独立的数据包从一台计算机传输到另外一台计算机,但
是并不保证接受方能够接收到该数据包,也不保证接收方所接
收到的数据和发送方所发送的数据在内容和顺序上是完全一致
的。因此,UDP 协议更类似于普通邮政服务,寄信人不能够保
证所寄出去的信能够被收信人及时收到,后发出的信也许会比
先发出的信更早到达。

对于很多应用程序来说,在互相通讯的两台计算机之间保证一
个可靠与稳定的数据链是至关重要的。在这种情况下,就应该
首先考虑使用TCP 协议在凉台计算机之间建立起TCP/IP连接。
在HTTP (HyperText Transfer Protocol,超级文本传输协议)、
FTP (File Transfer Protocol, 文件传输协议)以及TELNET
应用程序中,均要求在通讯的双方之间建立起稳定可靠的数据
链,因此它们都使用了TCP 协议来进行数据传输。

在TCP 协议中,发送方和接收方必须交换额外的信息以保证接
收方已经接收到所发送的数据包并且所接收到的数据和发送方
所发送的数据在内容和顺序上是完全一致的。这些额外的信息
交换提高了数据传输的可靠度,但是也给网络带来了额外的负
担,导致数据交换的延迟,从而降低了整个网络的数据交换能
力。对于某些对实时性要求较高的应用程序来说,这样的延迟
有可能是不可接受的。例如一个毫秒级的时钟服务器按照一定
的频率向客户机提供当时的时间数据,如果这些时间数据在传
输过程中受到了较大的延迟,这些过时的时间数据是完全没有
意义的,即使客户机准确无误的接收到了这些数据。相反,如
果客户机所接收到的每一个数据包都是实时的,那么即使客户
机错过了一两个数据包也是可以接受的,因为他总是可以根据
后面所接收到的数据包来对自己进行校正。因此,对于对实时
性要求比较高但是对传输可靠度要求比较低的应用程序来说,
UDP 协议显然是一个合适的选择。

在通用的以太网(Ehternet)构架下,数据包是通过广播方式发
送给同一子网中的所有机器(网卡)的。也就是说,当机器A
给同一子网中的机器B 发送一个数据包的时候,在同一子网中
的机器C 同时也能够接收到这个数据包,只是在网卡的驱动里
面的某些设置使得这个数据包没有被交给上层的应用罢了。对
网络比较熟悉的网友一定知道,对某些网卡进行某些简单设置
之后就可以监听同一子网里面的所有数据包。在这个教程里面
我并不打算深入地讨论网络监听的技术,不过了解一下以太网
中数据传输的方式会有助于各位在应用程序中更好的利用有限
的网络资源。例如说,如果同样一份数据需要被传送给多个接
收者,在使用TCP/IP连接的情况下,数据发送者需要向网络发
送N 个同样的拷贝,在使用UDP 数据广播的情况下,数据发送
者只需要向网络发送一个拷贝。在这种情况下,使用TCP/IP连
接会大大的增加网络的负担。在一个普通的局域网络中,可以
认为由于网络状况较差而造成数据丢失的可能性比较小,而利
用UDP 数据广播进行数据交换能够大幅度减轻网络的负担。

通常来说,一台计算机只有一个物理界面与网络相连接(也就
是一个网卡),所有的应用程序均通过该物理界面从网络接收
数据或者将数据发送到网络。由于一个网络上同时存在多台计
算机,并且一台计算机上有可能同时存在多个应用程序需要与
网络进行数据交换,我们通常使用IP和端口号来识别需要进行
数据交换的计算机和应用程序。每台计算机由一个32位的IP地
址来识别,在一个网络中,每台计算机的IP地址都是唯一的,
因此应用程序能够根据IP地址来将数据发送到正确的计算机。
每个需要与网络进行数据交换的应用程序均被系统分配一个16
位的端口号,系统根据这个端口号将从网络接收到的数据转发
给相对应的应用程序。端口号的范围是从0 到65535 ,其中从
0 到1023被系统所保留,主要是用来提供HTTP, FTP以及TELNET
等系统服务,因此用户自己的应用程序不应该试图去使用小于
1023的端口。

需要说明的是,以上介绍仅仅适用于IPv4网络。未来的IPv6网
络和IPv4有较大的不同,需要进一步了解该部分内容的网友请
自行阅读有关资料。

2   阅读与作业

阅读Java Tutorial 里面的如下章节,手工输入并编译运行里
面的所有例程,在读书报告里面详细记录你在学习过程中遇到
的问题、解决方法,以及其他感想。

1) Custom Networking

作业:

写一个服务器程序,其功能是维护一个名言列表。该服务器运
行在8008端口,当有一个客户连接到服务器上的时候,服务器
从名言列表中随机选取一句名言发送给客户,然后切断与客户
机的连接。这个服务器程序必须能够同时为多个客户服务。

名言列表被保存在一个文本文件里面,服务器程序启动的时候
从这个文件里面读入所有的名言并且保存在一个LinkedList里
面。所有的客户访问这个LinkedList获得一个名言而不需要重
新读取文件。

各位在做这个作业的时候请尽量重复利用前面作业3 里面写好
的代码。


(“`-”-/”).___..–””`-._                         云与清风常拥有,
`6_ 6  )   `-.  (     ).`-.__.`)                 冰雪知音世难求。
(_Y_.)’  ._   )  `._ `. “-..-                  击节纵歌相对笑,
_..`–‘_..-_/  /–‘_.’ ,’                        案上诗书杯中酒。
(il),-”  (li),’  ((!.-‘                              2000.12.31
______________________________________________________________________

※ 来源:·BBS 水木清华站 smth.org·[FROM: 219.238.203.*]

Leave a Reply

Panorama Theme by Themocracy