网络蜘蛛程序学习1
Bot程序:一种“有意识”的Internet程序,能从指定的Internet站点上检索信息。有人叫这个为:网络机器人。
例如:桌面应用程序会检查邮箱邮件,有新邮件会自动提醒。但是Bot程序是否合法?有些网站明令禁止,比如:股票站点。所以,作为Bot程序搜索必须合法。
Spider程序:一种专业化的Bot程序,用于查找大量的Web页面,Spider程序事先并不知道将要查询的页面,程序通过上一个页面查找下一个页面。有人叫这个为:网络蜘蛛程序。
蜘蛛程序应用在搜索引擎方面比较多,还可以应用于:扫描出中断的链接等。
1,java套接字编程技术
Web是建立在HTTP之上的协议,而HTTP又是建立在TCP/IP之上的协议,而TCP/IP它同时也是一种套接字协议。
TCP/IP网络上所有的计算机都看成是平等的,这种类型的网络叫对等网络。服务器和普通的网络也是对等的。
网络编程=套接字编程。网络上的每一台电脑都有很多套接字辅助计算机程序生效。这些套接字叫端口。端口号很重要,其中一个就是80端口号,是HTTP使用。多个客户端是可以同时连接到同一台服务器。但是每个时刻只有一个程序能监听同样的服务器端口。例如:很多电视机(客户端)可以调到一个特定的频道(服务器),但是几个台(服务器群)不可能在同一个频道上播放。
TCP/IP协议是由两个协议组合:传输控制协议(TCP)和Internet协议(IP)。IP负责将数据包从一个节点传到另外一个节点,而TCP负责校验数据正确性。
主机名和IP是多对多的关系。通过ping主机名可以得到主机的IP。
DNS如何将主机名解析成IP地址
主机名转换成IP地址有多精确呢?可以通过DNS来转换。
DNS服务器是指能返回与特定主机名相关联的IP地址的服务器。解析主机名的操作由大批设置在世界各地的DNS服务器完成。而DNS也是通过主机名,为了解决矛盾,DHCP产生了。
在很多网络中,计算机系统都是用DHCP取代强行要求用户指定大部分网络配置信息(包括IP地址和DNS服务器)。利用DHCP使IP网络上的每台jsj都能从DHCP服务器上获取他们的初始配置信息,无需用户自己设置。用户的计算机第一次联网都会申请这些信息。
使用java实现主机名查找IP地址:
package wans.com.chapter1;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* 使用主机名查找IP地址
* @author wans
*/
public class FindIP {
public static void main(String[] args) throws UnknownHostException {
String hostname = "www.baidu.com";
if(hostname.length() <= 0) {
System.out.println("主机名不能为空!");
}else {
InetAddress address = InetAddress.getByName(hostname);
System.out.println("IP地址为: " + address);
}
}
}
Java I/O编程技术
Java的I/O类由输入流,输出流,阅读器,写入器,过滤器组成。
1,输出流
OutputStream:public abstract class OutputStream extends Object implements Closeable, Flushable
直接已知子类: ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
方法摘要 |
|
void |
close() 关闭此输出流并释放与此流有关的所有系统资源。 |
void |
flush() 刷新此输出流并强制写出所有缓冲的输出字节。 |
void |
write(byte[] b) 将 b.length 个字节从指定的字节数组写入此输出流。 |
void |
write(byte[] b, int off, int len) 将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流。 |
abstract void |
write(int b) 将指定的字节写入此输出流。 |
2,输入流
InputStream:public abstract class InputStream extends Object implements Closeable
直接已知子类: AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream
方法摘要 |
|
int |
available() 返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数。 |
void |
close() 关闭此输入流并释放与该流关联的所有系统资源。 |
void |
mark(int readlimit) 在此输入流中标记当前的位置。 |
boolean |
markSupported() 测试此输入流是否支持 mark 和 reset 方法。 |
abstract int |
read() 从输入流读取下一个数据字节。 |
int |
read(byte[] b) 从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。 |
int |
read(byte[] b, int off, int len) 将输入流中最多 len 个数据字节读入字节数组。 |
void |
reset() 将此流重新定位到对此输入流最后调用 mark 方法时的位置。 |
long |
skip(long n) 跳过和放弃此输入流中的 n 个数据字节。 |
Java中的套接字编程
Java定义了两个类:Socket和ServerSocket。使用输入和输出流进行交换。
2,HTTP超文本传输协议
HTTP和HTTPS(HTTP加密形式)。
URL是URI的一个子集(略)