网络编程
摘要: 对于缓冲区来说,最重要的操作就是读写操作。缓冲区提供了两种方法来读写缓冲区中的数据:get、put方法和array方法。而get、put方法可以有三种读写数据的方式:按顺序读写单个数据、在指定位置读写单个数据和读写数据块。除了上述的几种读写数据的方法外,charbuffer类还提供了用于专门写字符串的put和append方法。在本文及后面的文章中将分别介绍这些读写缓冲区的方法。
摘要: 如果将同步i/o方式下的数据传输比做数据传输的零星方式(这里的零星是指在数据传输的过程中是以零星的字节方式进行的),那么就可以将非阻塞i/o方式下的数据传输比做数据传输的集装箱方式(在字节和低层数据传输之间,多了一层缓冲区,因此,可以将缓冲区看做是装载字节的集装箱)。大家可以想象,如果我们要运送比较少的货物,用集装箱好象有点不太合算,而如果要运送上百吨的货物,用集装箱来运送的成本会更低。在数据传输过程中也是一样,如果数据量很小时,使用同步i/o方式会更适合,如果数据量很大时(一般以g为单位),使用非阻塞i/o方式的效率会更高。因此,从理论上说,数据量越大,使用非阻塞i/o方式的单位成本就会越低。产生这种结果的原因和缓冲区的一些特性有着直接的关系。在本节中,将对缓冲区的一些主要特性进行讲解,使读者可以充分理解缓冲区的概念,并能通过缓冲区来提高程序的执行效率。
摘要: 为了使读者更好地理解非阻塞i/o,本节给出了一个简单的例子用来演示如何将非阻塞i/o应用到网络程序中。读者可以先不必管这个例子的具体细节。因为这个例子的主要目的并不是讲解非阻塞i/o的使用,而是先让读者对非阻塞i/o有一个笼统的感性认识。在看完这个例子后,读者可能会有很多疑问,在本章后面的部分将会逐渐揭开这些迷团。这个例子的主要功能是访问新浪网,并将新浪网的凯发k8网页登录首页在控制台上输出。
摘要: 在网络应用中,一般可以采用同步i/o(阻塞i/o)和非阻塞i/o两种方式进行数据通讯。这两种方式并非互相排斥和互相取代。我们可以在平时的应用中单独采用其中一种通讯方式,也可以混合使用这两种通讯方式。在本文中就什么是非阻塞i/o以及为什么要使用这种通讯方式进行了介绍,在下一篇文章中给出了一个简单的例子来演示在网络应用中如何使用非阻塞i/o进行通讯。
摘要: 使用serversocket类的implaccept方法可以使用accept方法返回一个socket子类对象。但implaccept是protected方法,因此,必须在serversocket类的子类中覆盖accept方法,然后在accept方法中使用implaccept方法重新设置socket对象。
摘要: serversocket类有以下三个选项:
1. so_timeout: 设置accept方法的超时时间。
2. so_reuseaddr:设置服务端同一个端口是否可以多次绑定。
3. so_recbuf:设置接收缓冲区的大小。
摘要: 本文介绍了如何通过getlocalport、getinetaddress和getlocalsocketaddress方法获得服务端的信息,以及ftp的两种模式:主动模式和被动模式,及其原理。
摘要: 在客户端和服务端的数据交互完成后,一般需要关闭网络连接。对于服务端来说,需要关闭socket和serversocket。在关闭socket后,客户端并不会马上感知自已的socket已经关闭,也就是说,在服务端的socket关闭后,客户端的socket的isclosed和isconnected方法仍然会分别得到false和true。但对已关闭的socket的输入输出流进行操作会抛出一个socketexception异常。
摘要: 在建立完serversocket对象后,通过accept方法返回的socket对象,服务端就可以和客户端进行数据交互。socket类和serversocket类都有两个得到输入输出流的方法:getinputstream和getoutputstream。对于socket类而言,使用getinputstream方法得到的inputstream是从服务端获取数据,而getoutputstream方法得到的outputstream是向服务端发送数据。而serversocket的getinputstream和getoutputstream方法也类似。inputstream从客户端读取数据,outputstream向客户端发送数据。
摘要: 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地址。
摘要: 在前面的文章曾讨论了http消息头的三个和断点继传有关的字段。一个是请求消息的字段range,另两个是响应消息字段accept-ranges和content-range。其中accept-ranges用来断定web服务器是否支持断点继传功能。在这里为了演示如何实现断点继传功能,假设web服务器支持这个功能;因此,我们只使用range和content-range来完成一个断点继传工具的开发。
摘要: 本文介绍了http消息的学用头字段的功能和用法,如host、connection、range、date、content-length等,本文的需要使用http模拟器进行测试,该模拟器请从如下地址下载:http://files.cnblogs.com/nokiaguy/httpsimulator.rar
摘要: 在讨论http协议的具体请求和响应头字段之前,让我们先来利用以前所学的知识来实现一个http模拟器。所谓http模拟器就是可以在用户输入http的请求消息后,由这个模拟器将http请求发送给相应的服务器,再接收服务器的响应消息。这个http模拟器有几下特点:
1. 可以手工输入http请求,并向服务器发送。
2. 接收服务器的响应消息。
3. 消息头和实体内容分段显示,也就是说,并不是象telnet等客户端一样将http响
应消息全部显示,而是先显示消息头,然后由用户决定是否显示实体内容。
4. 集中发送请求。这个http模拟器和telnet不同的是,并不是一开始就连接服务器,而是将域名、端口以及http请求消息都输完后,才连接服务器,并将这些请求发送给服务器。这样做的可以预防服务器提前关闭网络连接的现象。
5. 可以循环做上述的操作。
摘要: 当用户在浏览器中输入一个基于http协议的url时(以http://开头的url),就相当于通知器按着这个url组织生成一个http请求,并交过个请求发送到服务器;同时,等待服务器的响应。无论是请求还是响应,都统称为http消息。
摘要: http协议是一种应用层协议,http是hypertext transfer protocol(超文本传输协议)的英文缩写。http可以通过传输层的tcp协议在客户端和服务器之间传输数据。http协议主要用于web浏览器和 web服务器之间的数据交换。我们在使用ie或firefox浏览网页或下载web资源时,通过在地址栏中输入http://host:port /path,开头的4个字母http就相当于通知浏览器使用http协议来和host所确定的服务器进行通讯。