A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 袁梦希 于 2013-5-20 19:51 编辑

网络编程是什么?
网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。连接一旦建立以后,就客户端和服务器端就可以进行数据传递了,而
且两者的身份是等价的。在一些程序中,程序既有客户端功能也有服务器端功能,最常见的软件就是BT、emule 这类软件了。下面来谈一下如何建立连接以及如何发送数据。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IP 地址和域名
在现实生活中,如果要打电话则需要知道对应人的电话号码,如果要寄信则需要知道收信人的地址。在网络中也是这样,需要知道一个设备的位置,则需要使用该设备的IP 地址,具体的连接过程由硬件实现,程序员不需要过多的关心。
IP 地址是一个规定,现在使用的是IPv4,既由4 个0-255 之间的数字组成,在计算机内部存储时只需要4 个字节即可。在计算机中,IP 地址是分配给网卡的,每个网卡有一个唯一的IP 地址,如果一个计算机有多个网卡,则该台计算机则拥有多个不同的IP 地址,在同一个网络内部,IP 地址不能相同。IP地址的概念类似于电话号码、身份证这样的概念。由于IP 地址不方便记忆,所以有专门创造了域名(Domain Name)的概念,其实就是给IP 取一个字符的名字,例如163.com、sina.com 等。IP 和域名之间存在一定的对应关系。如果把IP 地址类比成身份证号的话,那么域名就是你的姓名。其实在网络中只能使用IP 地址进行数据传输,所以在传输以前,需要把域名转换为IP,这个由称作DNS 的服务器专门来完成。所以在网络编程中,可以使用IP 或域名来标识网络上的一台设备。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
端口的概念
为了在一台设备上可以运行多个程序,人为的设计了端口(Port)的概念,类似的例子是公司内部的分机号码。规定一个设备有216 个,也就是65536 个端口,每个端口对应一个唯
一的程序。每个网络程序,无论是客户端还是服务器端,都对应一个或多个特定的端口号。由于0-1024 之间多被操作系统占用,所以实际编程时一般采用1024以后的端口号。
使用端口号,可以找到一台设备上唯一的一个程序。所以如果需要和某台计算机建立连接的话,只需要知道IP 地址或域名即可,但是如果想和该台计算机上的某个程序交换数据的话,还必须知道该程序使用的端口号。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
数据传输方式
知道了如何建立连接,下面就是如何传输数据了,先来看一下数据传输的方式。在网络上,不管是有线传输还是无线传输,数据传输的方式有两种:
<!--[if !supportLists]-->l <!--[endif]-->TCP(Transfer ControlProtocol)
传输控制协议方式,该传输方式是一种稳定可靠的传送方式,类似于显示中的打电话。只需要建立一次连接,就可以多次传输数据。就像电话只需要拨一次号,就可以实现一直通话一样,如果你说的话不清楚,对方会要求你重复,保证传输的数据可靠。使用该种方式的优点是稳定可靠,缺点是建立连接和维持连接的代价高,传输速度不快。
<!--[if !supportLists]-->l <!--[endif]-->UDP(User Datagram Protocol)
用户数据报协议方式,该传输方式不建立稳定的连接,类似于发短信息。每次发送数据都直接发送。发送多条短信,就需要多次输入对方的号码。该传输方式不可靠,数据有可能收不到,系统只保证尽力发送。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
协议的概念
协议(Protocol)是网络编程中一个非常重要的概念,指的是传输数据的格式。因为大家在网络中需要传输各种各样的信息,在程序中获得到的都是一组数值,如何阅读这些数值呢,就需要提前规定好这组数据的格式,在客户端按照该格式生成发送数据,服务器端按照该格式阅读该数据,然后在按照一定的格式生成数据反馈给客户端,客户端再按照该格式阅读数据。现实中类似的例子就是电报编码,每个数字都是用特定的数据表达。一般程序的协议都分成客户端发送的数据格式,以及服务器端反馈的数据格式,客户端和服务器端都遵循该格式生成或处理数据,实现两者之间的复杂数据交换。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
资料还在整理中.....
返回主贴:点击==>>  http://bbs.itheima.com/thread-50627-1-1.html
补充帖:点击==>>  http://bbs.itheima.com/thread-50704-1-1.html

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 是第八贴!!!!!

查看全部评分

5 个回复

倒序浏览
本帖最后由 袁梦希 于 2013-5-20 19:49 编辑

黑马论坛搜索帖:
TCP和UDP的区别:
http://bbs.itheima.com/thread-47966-1-1.html
http://bbs.itheima.com/thread-45438-1-1.html
http://bbs.itheima.com/thread-45285-1-1.html
http://bbs.itheima.com/thread-20643-1-1.html
TCP与UDP协议的具体使用:
http://bbs.itheima.com/thread-41933-1-1.html
百度博客的收集:
传输控制协议是一种基于流的网络通讯方法,它与其它的任何协议都有很大的不同。本文讨论TCP流以及在Java中怎样操作它。

  一、概述

  TCP提供的网络通讯接口与用户数据报协议(UDP)截然不同。TCP的特性使网络编程很具魅力,而且它删除了UDP的很多干扰部分(例如数据包的排序和丢失),简化了网络通讯。UDP关心的是数据包的传输,而TCP关注的是建立网络连接,并在网络连接中发送和接收字节流。  数据包可以通过网络用多种方法发送,并且它们到达的时间可能不同。这有利于性能的提高和程序的健壮性,因为单个包的丢失不一定干扰其它包的传输。但是,这样的系统使程序员必须作更多的工作,他们必须保证数据的送达(delivery)。TCP通过对发送和次序的保证消除了这些额外的工作,为客户端和支持两路(two-way)通讯的服务器之间提供了可靠的字节通讯流。它在两台计算机之间建立了"虚拟连接",可以通过虚拟连接发送数据流。

图1:TCP建立虚拟连接传输数据

  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套接字进行通讯比通过数据报包通讯更加简单。

  

点评

我也觉得疯了  发表于 2013-5-20 20:19

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 这家伙疯了

查看全部评分

回复 使用道具 举报
本帖最后由 袁梦希 于 2013-5-20 19:50 编辑

2、使用端口在应用程序之间通讯

  很明显,TCP与UDP之间差别巨大,但是在两种协议之间也有一项重要的相似性。两种都共享了通讯端口的概念,它可以区别各个应用程序。在相同的端口上可以运行多个服务和客户端,而且希望不给它们分配端口号而挑选出某个应用程序是不可能的。当TCP套接字建立到某台计算机的连接的时候,它需要两部分非常重要的信息才能连接到远程客户端--该计算机的IP地址和端口号。此外,本地的IP地址和端口号也将绑定到它上面,因此远程计算机能够识别是哪一个应用程序建立了连接(图3所示)。总之,你不会希望你自己的电子邮件被在相同系统上运行软件的其它用户访问。


图3:本地端口识别了其它程序建立的到某个应用程序的连接,

  允许多个TCP应用程序在同一台计算机上运行

  TCP中的端口与UDP中的端口相似--它们的数字范围都是1-65535。1024以下的端口是受限制的,只能被知名的服务(例如HTTP、FTP、SMTP、POP3和telnet)使用。表1列举了一些知名的服务以及与它们对应的端口。

  表1:协议和与它们相关的端口

知名的服务 服务端口
Telnet 23
SMTP(简单邮件传输协议) 25
HTTP(超文本传输协议) 80
POP 3 110   3、套接字操作

  TCP套接字可以执行多种操作,包括:

  建立到某个远程主机的连接。
  给远程主机发送数据。
  从远程主机接收数据。
  关闭连接。

  此外还有一些特殊类型的套接字,它们提供绑定到特定端口号的服务。这类套接字通常用在服务器中,可以执行下面一些操作:

  绑定到某个本地端口
  从远程主机接收输入的连接
  从本地端口取消绑定。

  这两种套接字可以被分为不同的类,要么是客户端使用的,要么是服务器使用的(由于某些客户端可以象服务器一样操作,还有些服务器可以象客户端一样操作)。但是,客户端和服务器的角色还是可以靠经验区分的。


  3、网络服务器

  网络服务器的角色是绑定某个特定的端口(客户端使用它定位服务器),并且监听新的连接。尽管客户端是临时的,并且只有在用户选中的时候才运行,但是服务器程序必须不间断地运行(即使实际上没有已连接的客户端),期望某个客户端在某个时刻需要该服务。服务器程序通常作为数据自适应监视器进程引用,使用Unix用法。它持久的运行,而且一般在该服务器程序的主机启动时启动。因此服务器一直等待,直到某个客户端建立到该服务器端口的连接。有些服务器程序在某个时刻只能处理单个连接,其它一些服务器程序可以通过使用多线程同时处理多个连接。

  当开始连接后,服务器就服从客户端。它等待客户端发送请求,并且"忠实地"处理它们(可是服务器可以响应错误信息,特别是当请求违反某些重要地协议规则或有安全风险的时候)。某些协议(例如HTTP/1.0)通常在每个连接中只允许一个请求,而其它一些协议(例如POP3)支持一系列请求。服务器可以通过发送响应或错误消息应答客户端的请求。学习新的网络协议(编写客户端或服务器)与学习一种新的语言相似,只是语法改变了。但是典型情况下,它的命令的数量更小,使事情更简单。服务器的行为一部分由协议决定,一部分由开发者决定(某些命令是可选的,服务器不一定支持)。

  三、TCP套接字和Java

  Java提供了对TCP套接字的良好的支持,有两种套接字类:java.net.Socket和java.net.ServerSocket。当编写连接到已有服务的客户端软件的时候使用Socket类。当编写绑定到本地端口以提供服务的服务器软件的时候使用ServerSocket类。这是与DatagramSocket的UDP工作方式不同的地方--在TCP中,连接服务器地和从客户端接收数据的函数被分为两个独立的类。


  Java网络编程之TCP第二部分降再周六发表,在这一部分中我将详细介绍J2EE规范中的Socket类的体系结构,在下周推出的第三部分中,将介绍如何构建客户端和服务器端程序,同时介绍另一个重要的类:ServerSocket;敬请期待。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 你成神了吧

查看全部评分

回复 使用道具 举报
本帖最后由 袁梦希 于 2013-5-20 19:48 编辑

百度优秀博客地址收集(关于网络编程的):
http://blog.csdn.net/xiaojianpitt/article/details/2767213
http://www.enet.com.cn/article/2004/0310/A20040310293166.shtml
http://it.sohu.com/2004/03/10/17/article219381754.shtml
http://developer.51cto.com/art/200508/114.htm

CSDN优秀博客集:
http://blog.csdn.net/oKlaus/article/details/8935933
http://blog.csdn.net/Cloud_Strife_1985/article/details/8948070
http://blog.csdn.net/leeo1010/article/details/8936717
http://blog.csdn.net/fendou4533/article/details/8948798
http://blog.csdn.net/E770679957/article/details/8931816
http://blog.csdn.net/duola_rain/article/details/8936514



                                               ——————————如果以上有侵权行为请及时联系本楼主。

[fly]如果你看会了这些资料,已经成为王中之王了[/fly]


回复 使用道具 举报
{:soso_e102:}团长威武了{:soso_e179:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马