随笔 - 312, 文章 - 14, 评论 - 1393, 引用 - 0
数据加载中……

网络编程

Java网络编程从入门到精通(34):读写缓冲区中的数据---使用get和put方法按顺序读写单个数据
     摘要: 对于缓冲区来说,最重要的操作就是读写操作。缓冲区提供了两种方法来读写缓冲区中的数据:get、put方法和array方法。而get、put方法可以有三种读写数据的方式:按顺序读写单个数据、在指定位置读写单个数据和读写数据块。除了上述的几种读写数据的方法外,CharBuffer类还提供了用于专门写字符串的put和append方法。在本文及后面的文章中将分别介绍这些读写缓冲区的方法。  阅读全文

posted @ 2009-10-09 09:34 银河使者 阅读(4841) | 评论 (1)  编辑

Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)
     摘要: 如果将同步I/O方式下的数据传输比做数据传输的零星方式(这里的零星是指在数据传输的过程中是以零星的字节方式进行的),那么就可以将非阻塞I/O方式下的数据传输比做数据传输的集装箱方式(在字节和低层数据传输之间,多了一层缓冲区,因此,可以将缓冲区看做是装载字节的集装箱)。大家可以想象,如果我们要运送比较少的货物,用集装箱好象有点不太合算,而如果要运送上百吨的货物,用集装箱来运送的成本会更低。在数据传输过程中也是一样,如果数据量很小时,使用同步I/O方式会更适合,如果数据量很大时(一般以G为单位),使用非阻塞I/O方式的效率会更高。因此,从理论上说,数据量越大,使用非阻塞I/O方式的单位成本就会越低。产生这种结果的原因和缓冲区的一些特性有着直接的关系。在本节中,将对缓冲区的一些主要特性进行讲解,使读者可以充分理解缓冲区的概念,并能通过缓冲区来提高程序的执行效率。  阅读全文

posted @ 2009-08-31 08:49 银河使者 阅读(3204) | 评论 (0)  编辑

Java网络编程从入门到精通(32):一个非阻塞I/O的例子
     摘要: 为了使读者更好地理解非阻塞I/O,本节给出了一个简单的例子用来演示如何将非阻塞I/O应用到网络程序中。读者可以先不必管这个例子的具体细节。因为这个例子的主要目的并不是讲解非阻塞I/O的使用,而是先让读者对非阻塞I/O有一个笼统的感性认识。在看完这个例子后,读者可能会有很多疑问,在本章后面的部分将会逐渐揭开这些迷团。这个例子的主要功能是访问新浪网,并将新浪网的首页在控制台上输出。  阅读全文

posted @ 2009-08-21 09:08 银河使者 阅读(3018) | 评论 (3)  编辑

Java网络编程从入门到精通(31):非阻塞I/O简介
     摘要: 在网络应用中,一般可以采用同步I/O(阻塞I/O)和非阻塞I/O两种方式进行数据通讯。这两种方式并非互相排斥和互相取代。我们可以在平时的应用中单独采用其中一种通讯方式,也可以混合使用这两种通讯方式。在本文中就什么是非阻塞I/O以及为什么要使用这种通讯方式进行了介绍,在下一篇文章中给出了一个简单的例子来演示在网络应用中如何使用非阻塞I/O进行通讯。  阅读全文

posted @ 2009-08-16 10:46 银河使者 阅读(3097) | 评论 (2)  编辑

Java网络编程从入门到精通(30):定制accept方法
     摘要: 使用ServerSocket类的implAccept方法可以使用accept方法返回一个Socket子类对象。但implAccept是protected方法,因此,必须在ServerSocket类的子类中覆盖accept方法,然后在accept方法中使用implAccept方法重新设置Socket对象。  阅读全文

posted @ 2009-08-15 16:57 银河使者 阅读(2842) | 评论 (4)  编辑

Java网络编程从入门到精通(29):服务端Socket的选项
     摘要: ServerSocket类有以下三个选项:

1. SO_TIMEOUT: 设置accept方法的超时时间。

2. SO_REUSEADDR:设置服务端同一个端口是否可以多次绑定。

3. SO_RECBUF:设置接收缓冲区的大小。  阅读全文

posted @ 2009-08-12 14:50 银河使者 阅读(3178) | 评论 (1)  编辑

Java网络编程从入门到精通(28):获取ServerSocket信息的方法及FTP原理
     摘要: 本文介绍了如何通过getLocalPort、getInetAddress和getLocalSocketAddress方法获得服务端的信息,以及FTP的两种模式:主动模式和被动模式,及其原理。  阅读全文

posted @ 2009-08-12 14:27 银河使者 阅读(4783) | 评论 (1)  编辑

Java网络编程从入门到精通(27):关闭服务端连接
     摘要: 在客户端和服务端的数据交互完成后,一般需要关闭网络连接。对于服务端来说,需要关闭Socket和ServerSocket。在关闭Socket后,客户端并不会马上感知自已的Socket已经关闭,也就是说,在服务端的Socket关闭后,客户端的Socket的isClosed和isConnected方法仍然会分别得到false和true。但对已关闭的Socket的输入输出流进行操作会抛出一个SocketException异常。  阅读全文

posted @ 2009-08-04 09:26 银河使者 阅读(3690) | 评论 (3)  编辑

Java网络编程从入门到精通(26):在服务端接收和发送数据
     摘要: 在建立完ServerSocket对象后,通过accept方法返回的Socket对象,服务端就可以和客户端进行数据交互。Socket类和ServerSocket类都有两个得到输入输出流的方法:getInputStream和getOutputStream。对于Socket类而言,使用getInputStream方法得到的InputStream是从服务端获取数据,而getOutputStream方法得到的OutputStream是向服务端发送数据。而ServerSocket的getInputStream和getOutputStream方法也类似。InputStream从客户端读取数据,OutputStream向客户端发送数据。  阅读全文

posted @ 2009-07-20 13:53 银河使者 阅读(2974) | 评论 (2)  编辑

Java网络编程从入门到精通(25):创建ServerSocket对象
     摘要: ServerSocket类的构造方法有四种重载形式,它们的定义如下:
public ServerSocket() throws IOException
public ServerSocket(int port) throws IOException
public ServerSocket(int port, int backlog) throws IOException
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException

在上面的构造方法中涉及到了三个参数:port、backlog和bindAddr。其中port是ServerSocket对象要绑定的端口,backlog是请求队列的长度,bindAddr是ServerSocket对象要绑定的IP地址。  阅读全文

posted @ 2009-07-12 19:40 银河使者 阅读(3750) | 评论 (2)  编辑

Java网络编程从入门到精通(24):实现HTTP断点续传下载工具(附源代码)
     摘要: 在前面的文章曾讨论了HTTP消息头的三个和断点继传有关的字段。一个是请求消息的字段Range,另两个是响应消息字段Accept-Ranges和Content-Range。其中Accept-Ranges用来断定Web服务器是否支持断点继传功能。在这里为了演示如何实现断点继传功能,假设Web服务器支持这个功能;因此,我们只使用Range和Content-Range来完成一个断点继传工具的开发。  阅读全文

posted @ 2009-07-02 18:11 银河使者 阅读(4694) | 评论 (2)  编辑

Java网络编程从入门到精通(23):HTTP消息头字段
     摘要: 本文介绍了HTTP消息的学用头字段的功能和用法,如Host、Connection、Range、Date、Content-Length等,本文的需要使用HTTP模拟器进行测试,该模拟器请从如下地址下载:http://files.cnblogs.com/nokiaguy/HttpSimulator.rar  阅读全文

posted @ 2009-06-23 13:04 银河使者 阅读(3188) | 评论 (0)  编辑

Java网络编程从入门到精通(22):实现HTTP模拟器
     摘要: 在讨论HTTP协议的具体请求和响应头字段之前,让我们先来利用以前所学的知识来实现一个HTTP模拟器。所谓HTTP模拟器就是可以在用户输入HTTP的请求消息后,由这个模拟器将HTTP请求发送给相应的服务器,再接收服务器的响应消息。这个HTTP模拟器有几下特点:

1. 可以手工输入HTTP请求,并向服务器发送。

2. 接收服务器的响应消息。

3. 消息头和实体内容分段显示,也就是说,并不是象Telnet等客户端一样将HTTP响

应消息全部显示,而是先显示消息头,然后由用户决定是否显示实体内容。

4. 集中发送请求。这个HTTP模拟器和Telnet不同的是,并不是一开始就连接服务器,而是将域名、端口以及HTTP请求消息都输完后,才连接服务器,并将这些请求发送给服务器。这样做的可以预防服务器提前关闭网络连接的现象。

5. 可以循环做上述的操作。
  阅读全文

posted @ 2009-06-09 12:16 银河使者 阅读(4651) | 评论 (11)  编辑

Java网络编程从入门到精通(21):HTTP消息的格式
     摘要: 当用户在浏览器中输入一个基于HTTP协议的URL时(以http://开头的URL),就相当于通知器按着这个URL组织生成一个HTTP请求,并交过个请求发送到服务器;同时,等待服务器的响应。无论是请求还是响应,都统称为HTTP消息。  阅读全文

posted @ 2009-06-08 17:22 银河使者 阅读(3888) | 评论 (3)  编辑

Java网络编程从入门到精通(20):HTTP协议简介
     摘要: HTTP协议是一种应用层协议,HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写。HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据。HTTP协议主要用于Web浏览器和 Web服务器之间的数据交换。我们在使用IE或Firefox浏览网页或下载Web资源时,通过在地址栏中输入http://host:port /path,开头的4个字母http就相当于通知浏览器使用HTTP协议来和host所确定的服务器进行通讯。  阅读全文

posted @ 2009-06-07 09:38 银河使者 阅读(4591) | 评论 (2)  编辑

Java网络编程从入门到精通(19):套接字(Socket)的异常
     摘要: 在Socket 类中有很多方法在声明时使用throws抛出了一些异常,这些异常都是IOException的子类。在Socket类的方法中抛出最多的就是 SocketException,其余还有七个异常可供Socket类的方法抛出。这些异常的继承关系如图1所示。其中灰色背景框所描述的例外就是 Socket类的方法可能抛出的异常。  阅读全文

posted @ 2009-06-02 08:19 银河使者 阅读(3224) | 评论 (2)  编辑

Java网络编程从入门到精通(18):Socket类的getter和setter方法(2)
     摘要: 在Java类中,getter和setter方法占了很大的比重。由于Java中没有定义属性的关键字;因此,getter和setter方法用于获得和设置Java类的属性值;如getName和setName方法用于设置name属性的值。如果某个属性只有getter方法,那这个属性是只读的;如果只有setter方法,那么这个属性是只写的。在Socket类中也有很多这样的属性来获得和Socket相关的信息,以及对Socket对象的状态进行设置。  阅读全文

posted @ 2009-06-01 17:31 银河使者 阅读(3718) | 评论 (0)  编辑

Java网络编程从入门到精通(17):Socket类的getter和setter方法(1)
     摘要: 在Java类中,getter和setter方法占了很大的比重。由于Java中没有定义属性的关键字;因此,getter和setter方法用于获得和设置Java类的属性值;如getName和setName方法用于设置name属性的值。如果某个属性只有getter方法,那这个属性是只读的;如果只有setter方法,那么这个属性是只写的。在Socket类中也有很多这样的属性来获得和Socket相关的信息,以及对Socket对象的状态进行设置。  阅读全文

posted @ 2009-05-29 09:43 银河使者 阅读(4761) | 评论 (3)  编辑

Java网络编程从入门到精通(16):客户端套接字(Socket)的超时
     摘要: 客户端套接字的超时(timeout)就是指在客户端通过Socket和服务器进行通讯的过程中,由于网络延迟,网络阻塞等原因,造成服务器并未及时响应客户端的一种现象。在一段时间后,客户端由于未收到服务端的响应而抛出一个超时错误; 其中客户端所等待的时间就是超时时间。由于生产超时错误的一端都是被动端;也就是说,这一端是在接收数据,而不是发送数据。对于客户端Socket来说,只有两个地方是在接收数据;一个是在连接服务器时;另一个是在连接服务器成功后,接收服务器发过来的数据时。因此,客户端超时也分为两种类型:连接超时和读取数据超时。  阅读全文

posted @ 2009-05-26 08:48 银河使者 阅读(3890) | 评论 (0)  编辑

Java网络编程从入门到精通(15):为什么要使用SocketAddress来管理网络地址
     摘要: 在使用Socket来连接服务器时最简单的方式就是直接使用IP和端口,但Socket类中的connect方法并未提供这种方式,而是使用 SocketAddress类来向connect方法传递服务器的IP和端口。虽然这种方式从表面上看要麻烦一些,但它会给我们带来另外一个好处,那就是网络地址的重用。  阅读全文

posted @ 2009-05-22 09:02 银河使者 阅读(12522) | 评论 (0)  编辑

Java网络编程从入门到精通(14):多种多样的建立网络连接的方式
     摘要: 在上一篇文章中我们讨论了Socket类的基本用法,并给出的例子中使用Socket类连接服务器时使用了一种最简单的连接方式,也就是通过IP和端口号来连接服务器。而为了使连接服务器的方式更灵活,Socket类不仅可以通过自身的构造方法连接服务器,而且也可以通过connect方法来连接数据库。  阅读全文

posted @ 2009-05-18 09:01 银河使者 阅读(4197) | 评论 (2)  编辑

Java网络编程从入门到精通(13):使用Socket类接收和发送数据
     摘要: 网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类。通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据。在本文及后面的数篇文章中将详细讨论Socket类的使用,内容包括Socket类基础、各式各样的连接方式、get和set方法、连接过程中的超时以及关闭网络连接等。  阅读全文

posted @ 2009-05-14 10:21 银河使者 阅读(9214) | 评论 (3)  编辑

Java网络编程从入门到精通(12):使用isReachable方法探测主机是否可以连通
     摘要: 在J2SE5.0中的InetAddress类中增加了一个isReachable方法。可以使用这个方法来探测主机是否可以连通。  阅读全文

posted @ 2009-05-08 09:00 银河使者 阅读(4601) | 评论 (0)  编辑

Java网络编程从入门到精通(11):使用NetworkInterface类获得网络接口信息
     摘要: 从JDK1.4开始,Java提供了一个NetworkInterface类。这个类可以得到本机所有的物理网络接口和虚拟机等软件利用本机的物理网络接口创建的逻辑网络接口的信息。  阅读全文

posted @ 2009-05-08 08:53 银河使者 阅读(10254) | 评论 (9)  编辑

Java网络编程从入门到精通(10):Inet4Address类和Inet6Address类
     摘要: 为了区分IPv4和IPv6地址,Java提供了两个类:Inet4Address和Inet6Address,它们都是InetAddress类的子类,这两个类分别按着IPv4和IPv6的规则实现了InetAddress类中的public方法。它们所不同的是Inet6Address类比Inet4Address类多了一个方法:isIPv4CompatibleAddress,这个方法用来判断一个IPv6地址是否和IPv4地址兼容。和IPv4兼容的IPv6地址除了最后四个字节有值名,其他的字节都是0,如0:0:0:0:0:0.192.168.18.10、::ABCD:FAFA都是和IPv4兼容的IPv6地址。  阅读全文

posted @ 2009-05-04 19:13 银河使者 阅读(5948) | 评论 (0)  编辑

Java网络编程从入门到精通 (9):使用isXxx方法判断地址类型
     摘要: IP地址分为普通地址和特殊地址。在前面的文章中所使用的大多数都是普通的IP地址,在本文中将介绍如何利用InetAddress类提供的十个方法来确定一个IP地址是否是一个特殊的IP地址。  阅读全文

posted @ 2009-04-26 18:07 银河使者 阅读(4865) | 评论 (2)  编辑

Java网络编程从入门到精通(8):用getAddress方法获得IP地址
     摘要: getAddress方法和getHostAddress类似,它们的唯一区别是getHostAddress方法返回的是字符串形式的IP地址,而getAddress方法返回的是byte数组形式的IP地址。getAddress方法的定义是public byte[] getAddress()。这个方法返回的byte数组是有符号的。在Java中byte类型的取值范围是-128〜127。如果返回的IP地址的某个字节是大于127的整数,在byte数组中就是负数。由于Java中没有无符号byte类型,因此,要想显示正常的IP地址,必须使用int或long类型。  阅读全文

posted @ 2009-04-21 12:41 银河使者 阅读(5219) | 评论 (0)  编辑

Java网络编程从入门到精通(7):用getHostAddress方法获得IP地址
     摘要: getHotAddress方法用来得到主机的IP地址,这个IP地址可能是IPv4的地址,也可能是IPv6的地址。getHostAddress方法的定义是public String getHostAddress()无论InetAddress对象是使用哪种方式创建的,getHostAddress方法都不会访问DNS服务器。如果想访问使用IPv6地址的远程主机,需要在操作系统上安装IPv6协议。  阅读全文

posted @ 2009-04-21 12:33 银河使者 阅读(6472) | 评论 (0)  编辑

Java网络编程从入门到精通(6):使用getCanonicalHostName方法获得主机名
     摘要: getCanonicalHostName方法和getHostName方法一样,也是得到远程主机的域名。但它们有一个区别。getCanonicalHostName得到的是主机名,而getHostName得到的主机别名。在访问某些域名时,getCanonicalHostName方法和getHostName方法的返回值是一样的,这和DNS服务器如何解释主机名和主机别名以及它们的设置有关。如通过www.ibm.com创建InetAddress对象后,使用getCanonicalHostName方法和getHostName方法返回的结果都是www.ibm.com(有时直接返回IP地址,这可能和IBM的DNS服务器的处理机制有关)。如果DNS不允许通过IP地址得到域名,那么这两个方法就会返回IP地址来代替域名。
  阅读全文

posted @ 2009-04-14 08:56 银河使者 阅读(6533) | 评论 (0)  编辑

Java网络编程从入门到精通(5):使用InetAddress类的getHostName方法获得域名
     摘要: getHostName方法可以得到远程主机的域名,也可以得到本机名。getHostName方法的定义是public String getHostName(),匀样可以使用三种方法创建InetAddress对象,这三种方法为:1.使用getLocalHost方法创建InetAddress对象。2.使用域名创建InetAddress对象。3. 使用IP地址创建InetAddress对象
  阅读全文

posted @ 2009-04-14 08:42 银河使者 阅读(5043) | 评论 (0)  编辑

Java网络编程从入门到精通(4):DNS缓存
     摘要: 在通过DNS查找域名的过程中,可能会经过多台中间DNS服务器才能找到指定的域名,因此,在DNS服务器上查找域名是非常昂贵的操作。在Java中为了缓解这个问题,提供了DNS缓存。当InetAddress类第一次使用某个域名(如www.csdn.net)创建InetAddress对象后,JVM就会将这个域名和它从DNS上获得的信息(如IP地址)都保存在DNS缓存中。当下一次InetAddress类再使用这个域名时,就直接从DNS缓存里获得所需的信息,而无需再访问DNS服务器。  阅读全文

posted @ 2009-04-06 21:06 银河使者 阅读(4848) | 评论 (2)  编辑

Java网络编程从入门到精通(3):为什么不能直接通过IP访问网站
     摘要: 在《创建InetAddress对象的四个静态方法》一文中通过getAllByName得到了www.csdn.net对应的四个IP地址。从理论上说,在IE(或其他的Web浏览器,如Firefox)的地址栏中输入这四个IP地址中的任何一个,都可能访问www.csdn.net。如输入http://211.100.26.124。但IE却返回了一个错误信息。在输入另外三个IP后,都会得到同样的错误信息。  阅读全文

posted @ 2009-03-31 10:44 银河使者 阅读(4370) | 评论 (6)  编辑

Java网络编程从入门到精通(2):创建InetAddress对象的四个静态方法
     摘要: InetAddress类是Java中用于描述IP地址的类。它在java.net包中。在Java中分别用Inet4Address和Inet6Address类来描述IPv4和IPv6的地址。这两个类都是InetAddress的子类。由于InetAddress没有public的构造方法,因此,要想创建InetAddress对象,必须得依靠它的四个静态方法。InetAddress可以通过getLocalHost方法得到本机的InetAddress对象,也可以通过getByName、getAllByName和getByAddress得到远程主机的InetAddress对象。  阅读全文

posted @ 2009-03-31 10:35 银河使者 阅读(5337) | 评论 (1)  编辑

Java网络编程从入门到精通(1):Internet地址概述
     摘要: 所有连入Internet的终端设备(包括计算机、PDA、打印机以及其他的电子设备)都有一个唯一的索引,这个索引被称为IP地址。现在Internet上的IP地址大多由四个字节组成,这种IP地址叫做IPv4。除了这种由四个字节组成的IP,在Internet上还存在一种IP,这种IP由16个字节组成,叫做IPv6。IPv4和IPv6后面的数字是Internet协议(Internet Protocol,IP)的版本号。
  阅读全文

posted @ 2009-03-23 21:03 银河使者 阅读(6111) | 评论 (2)  编辑