Java网络编程之传输控制协议(一)

2016-02-19 12:44 3 1 收藏

下面图老师小编跟大家分享一个简单易学的Java网络编程之传输控制协议(一)教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

【 tulaoshi.com - 编程语言 】


  一、概述
  
  TCP提供的网络通讯接口与用户数据报协议(UDP)截然不同。TCP的特性使网络编程很具魅力,而且它删除了UDP的很多干扰部分(例如数据包的排序和丢失),简化了网络通讯。UDP关心的是数据包的传输,而TCP关注的是建立网络连接,并在网络连接中发送和接收字节流。  数据包可以通过网络用多种方法发送,并且它们到达的时间可能不同。这有利于性能的提高和程序的健壮性,因为单个包的丢失不一定干扰其它包的传输。但是,这样的系统使程序员必须作更多的工作,他们必须保证数据的送达(delivery)。TCP通过对发送和次序的保证消除了这些额外的工作,为客户端和支持两路(two-way)通讯的服务器之间提供了可靠的字节通讯流。它在两台计算机之间建立了"虚拟连接",可以通过虚拟连接发送数据流。
  
  TCP使用更低层的(lower-level)的IP通讯协议在两台计算机之间建立连接。这种连接提供了一个答应字节流发送和接收的接口,并且采用透明的方式把数据转换为IP数据报。数据报(datagram)的问题之一是不能保证数据包到达目的地。TCP解决了这个问题,它提供了有保证的数据字节的送达。当然,网络错误影响了送达也是可能的,但是TCP通过类似重新发送数据包解决了这种实现的问题,并且只在情况很严重(例如没有到网络主机的路由或连接丢失了)的时候才提醒程序员。
  
  
  
  
  
  两台计算机之间的虚拟连接表现为套接字(socket)。套接字答应数据的发送和接收,但是UDP套接字和TCP套接字之间有本质的区别。首先TCP套接字连接到单个计算机,然而UDP套接字可以向多台计算机传输或接收数据;其次,UDP套接字只能发送和接收数据包,然而TCP答应通过字节流的数据传输(表现为输入流(InputStream)和输出流(OutputStream))。为了在网络上传输,它们被转换为数据包,不需要程序员干涉(如图2所示)。
  
  图2:TCP把数据流处理为协议的命令,但是为在网络上传输把流转换为IP数据报
  
  1、 UDP(用户数据报协议)上的TCP的优点
  
  ⑴自动化地错误控制
  
  TCP流上的数据传输比通过UDP的信息包的传输更可靠。在TCP下层,通过虚拟连接发送的数据包括一个检查机制以确保它们没有被破坏(与UDP类似)。但是,TCP保证了数据的送达--在传输过程中丢失的数据包将被重新传输。
  
  你也许想知道这是如何实现的--实际上,IP和UDP不保证送达,当数据包丢失的时候它们也不会发出任何警告。在TCP使用数据包发送了某个数据集合的时候就会启动一个计时器。在UDP中,我们使用 DatagramSocket.setSoTimeout为receive()操作启动一个计时器。在TCP中,假如接收者发送一个肯定的应答就禁止计时器,但是假如在超时前还没有收到肯定的应答,数据包就被重新传输。这意味着写入某个TCP套接字的任何数据将到达另一方而不需要程序员的进一步干涉(除非发生大的事故造成整个网络瘫痪)。错误控制的代码都由TCP处理了。
  
  ⑵可靠性
  
  因为在TCP连接中有多方参与的两台计算机之间发送的数据通过IP数据报传输,数据包到达的次序可能经常出现不同。这可能需要使用一个循环从TCP套接字读取信息,因为字节流的次序可能被打乱并且频繁碰到不可靠的问题。幸运的是,次序等问题已经被TCP处理好了--每一个数据包都包含一个用于排序的序列号。后发送、先到达的数据包将保持在一个队列中,直到排好次序的数据可以使用为止。接着数据就可以通过套接字的接口传递到应用程序中。
  
  ⑶易于使用
  
  尽管把信息存储为数据包的确没有超越程序员的范围,但这不会是计算机之间通讯的最高效率的途径。还应该有另外一些的复杂性,你可以讨论在某个底线之上设计和建立软件,为程序员提供足够的复杂性。典型情况下开发者欢迎软件开发复杂性的降低,TCP就实现了这种功能。TCP答应程序员用一种完全不同的方式思考问题,而这种方式更加现代化。数据不是被处理为不连续的单元(数据报包),而是被处理为连续的流,就像目前读者所熟悉的I/O流。TCP套接字延续了传统的Unix编程,在Unix编程中通讯与文件输入和输出是一样处理的。无论开发者写入网络套接字、通讯管道、数据结构、用户控制台或文件的时候,这种机制都时相同的。当然它也同样应用与读取信息。这使得通过TCP套接字进行通讯比通过数据报包通讯更加简单。
  
  2、使用端口在应用程序之间通讯
  
  很明显,TCP与UDP之间差别巨大,但是在两种协议之间也有一项重要的相似性。两种都共享了通讯端口的概念,它可以区别各个应用程序。在相同的端口上可以运行多个服务和客户端,而且希望不给它们分配端口号而挑选出某个应用程序是不可能的。当TCP套接字建立到某台计算机的连接的时候,它需要两部分非常重要的信息才能连接到远程客户端--该计算机的IP地址和端口号。此外,本地的IP地址和端口号也将绑定到它上面,因此远程计算机能够识别是哪一个应用程序建立了连接(图3所示)。总之,你不会希望你自己的电子邮件被在相同系统上运行软件的其它用户访问。
  
  图3:本地端口识别了其它程序建立的到某个应用程序的连接,

来源:http://www.tulaoshi.com/n/20160219/1601718.html

延伸阅读
标签: Java JAVA基础
不提倡使用的方法是为支持向后兼容性而保留的那些方法,它们在以后的版本中可能出现,也可能不出现。Java 多线程支持在版本 1.1 和版本 1.2 中做了重大修订,stop()、suspend() 和 resume() 函数已不提倡使用。这些函数在 JVM 中可能引入微妙的错误。虽然函数名可能听起来很诱人,但请抵制诱惑不要使用它们。 调试线程化...
标签: 电脑入门
当我们使用浏览器在Internet这个高速公路纵横驰骋时,需要用到诸如http、FTP之类的传输控制协议来准确寻找资源,获取文件,这类传输控制协议就好象是公路上的交通标志一样,如果你不了解它,将无法到达你希望去的地方。 下面笔者就来说说这方面的问题,希望能给初次冲浪的朋友带来一些方便。 1、HTTP 英文名称:hyper text tran...
DOM初步  DOM是Document Object Model的缩写,即文档对象模型。前面说过,XML将数据组织为一颗树,所以DOM就是对这颗树的一个对象描叙。通俗的说,就是通过解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个对象。我们通过存取这些对象就能够存取XML文档的内容。  下面我们来看一个简单的例子,看看在DOM中,我们是...
标签: Delphi
Http协议的通信遵循一定的约定.例如,请求一个文件的时候先发送Get请求,然后服务器会返回请求的数据.如果需要进行断点传输,那么先发送HEAD /请求,其中返回的Content-Length: 就是文件实际大小.将其和我们本地需要断点下载的文件大小比较,发送GET请求和发送需要下载的文件开始位置RANGE: bytes=+inttostr(iFilePos)+-+#13#10;服务器如果支...
5、GameScreen.java GameScreen使用了一个低级应用编程接口Canvas屏幕,和Image、Graphics类来绘制游戏面板、棋子,以及游戏的最终结果状态。要获取更详细的信息,请参阅各种绘画方法和drawCircle、drawCross、drawPiece、drawPlayerCursor、drawBoard等方法。这个屏幕使用MIDlet的quit回调方法来指示游戏结束。 此屏幕可适应各...

经验教程

184

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部