admin 管理员组文章数量: 887021
2024年2月29日发(作者:service controller)
辽宁省高等教育自学考试 计算机软件技术 专业
实 验 报 告 书
课程名称:网络编程技术及应用
助学单位
姓 名
准考证号
成 绩
二O一二年 九 月
实验五 Java的Internet应用 报告
一、实验目的:
1. 基本掌握查找Internet地址。
2. 熟练掌握用URL检索数据。
3. 基本掌握收发电子邮件。
二、实验任务:
1. 查找Internet地址
2. 用URL检索数据
3. 收发电子邮件
三、实验器材:
1.装有 Windows 系统计算机。
工具。
四、实验内容与步骤:
练习:
(一)查找Internet地址
dress类是Java的IP地址封装类。
一.InetAddress有适合于初始化InetAddress对象的3个静态方法,它们是:
1)public static InetAddress ame(String hostName)
UnknowHostException
它需要将寻找的主机名作为参数,并使用DNS查找主机的IP地址
2)public static InetAddress[]
UnknowHostException
ByName(String hostname) throws
throws
有些计算机具有一个以上的Internet地址,给定一个主机名,ByName()会返回一个包含了与该主机名相对应的所有地址的数组。
例如:InetAddress[] address=ByName(“/)
3)public static InetAddress alHost() throws UnknowHostException
alHost()执行在一个计算机上,它将返回该机器的InetAddress。
包的几个其他方法也能返回InetAddress对象。
二.InetAddress类包含了三个将主机名作为字符串返回并将IP地址既作为字符串又作为字节数组返回的方法:
1) public String getHostName()
getHostName()方法返回一个String,该字符串包含了具有该InetAddress对象表示的IP地址的主机名称,如果没有主机名返回一个具有点分形式的数字IP地址。
2) public byte[] getAddress()
getAddress()将IP地址以网络字节顺序作为字节数组返回。
例如:InetAddress me =alHost();
byte[ ] address=ress();
1
getAddress()返回的字节是无符号的,Java没有无符号字节的基本数据类型。值超过127以上的字节会作负数看待。因此需要做以下的改进:
int unsignedByte=signedByte<0?signedByte+256:signedByte;
3) public String getHostAddress()
getHostAddress()方法返回一个字符串,该字符串包含了点分格式的IP地址
InetAddress类中没有与它们相对应的setHostName()和setAddress()方法,因此Java可以确保主机名和IP地址的匹配。
三.dress类继承了。该类可以访问中的所有方法。它重载了3个方法并提供了更加特殊的功能
1)public Boolean equals(Object o)
仅当对象本身是InetAddress类的一个实例并且它具有相同的IP地址时,该对象等同于一个InetAddress对象。但是不需要具有相同的主机名。即只要IP地址相同就可以了。
2)public int hashCode()
hashCode()方法返回一个int,当InetAddress对象在散列表中作为关键字使用时需要这个int值。hashCode()返回的int仅仅是被转换的int的4个字节的IP地址。该值对每两个不等同的InetAddress对象是不同的。如果两个InetAddress对象具有相同的地址,则即使它们具有不同的主机名也会具有相同的散列码。因此使用等同的InetAddress对象作为关键字在散列表中存储两个对象,则第二个对象会重载第一个对象。解决方法是使用getHostName()方法返回的String作为关键字来代替InetAddress本身。
3) public String toString()
toString()产生的字符串具有下面的形式:主机名/点分地址
并非所有的InetAddress对象都有主机名,无主机名就用点分格式的IP地址来代替,该格式不明确地调用toString()。如要调用,语法很简单:
InetAddress thisComputer=alHost();
String address=ng();
(二)用URL检索数据
一.URL类
Java程序定位和检索网络上的数据最简单的方法是使用URL类。
类是对统一资源定位符的抽象。URL对象建立后,它的字段就不再改变。
构造实例的六个构造器:
1) 用字符串构造URL
public URL(String url) throws MalformedURLException
2)用组件构造URL
public URL(String protocol,String hostname,String file) throws MalformedURLException
这个构造器将端口设置为-1,所以协议的所有默认端口都可以用。
3)用组件构造URL
public URL(String protocol,String host,int port,String file) throws MalformedURLException
对于默认端口不正确的极少见情况,这个构造器可以明确地用int变量指定端口
4) 构造相对URL
public URL(URL base,String relative) throws MalformedURLException
这个构造器根据相对URL和基本URL构造绝对URL
例如:
try
{
2
URL u1=new URL(“/javafaq/”);
URL u2=new URL(u1,””);
}
catch (MalformedURLException e)
{
n(e);
}
5) 指定URLStreamHandler
public URL(URL base,String relative,URLStreamHandler handler) throws MalformedURLException
这个构造器由一个基本URL和相对part构建一个相对URL,然后用指定的处理器处理URL
6) 指定URLStreamHandler
public URL(String protocol,String host,int port,String file,URLStreamHandler handler) throws
MalformedURLException
这个构造器从它的组件部分构建URL,然后用指定的处理器处理URL。
除了这些构造器,Java类库中还有许多其他方法返回URL对象。其中大多数只是简单的获取方法,只返回用户可能已经知道的URL,因为用户已经首先用它来创建对象。
二.分解URL
URL可以认为是由五部分组成的:
1) 策略(scheme),也可以认为是协议
2) 权限
权限可以进一步分为用户信息、主机和端口。
3) 路径
4) 参考(ref),也称为节(section)或者已命名锚(named anchor)
5) 查询字符串
以只读方式访问URL这五部分的公共方法:
1) public String getProtocol()
getProtocol()方法返回一个String,包含URL的策略:比如:”http”,”https”,”file”等等。
2) public String getHost()
getHost()方法返回一个String,包含URL的主机名。
3) public int getPort()
getPort()方法返回端口号,该数值是一个在URL中指定的int。如果在URL中没有指定端口,那么getPort()方法返回-1,标志着URL没有明确指定端口,同时使用协议的默认端口。
4) public String getFile()
getFile()方法返回一个String,其中包含URL的路径和文件部分。从主机名后的第一个“/”开始,到另起一部分的“#”之前的符号,全部认为是文件部分。
5) public String getPath()
它与getFile()方法意义相同。
6) public String getRef()
getRef()返回URL的命名锚部分。如果URL没有一个已命名的锚,那么这个方法返回null。
3
例如:
try
{
URL u=new URL(“/javafaq/#xtocid1902914”);
n(“The ref of ”+u+ “ is ”+();
}
catch (MalformedURLException e)
{
n(e);
}
这段代码返回中,getRef()返回的字符串xtocid1902914
7) public String getQuery()
getQuery()方法返回URL的查询字符串。如果URL没有查询字符串,那么这个方法返回null。
8)public String getUserInfo()
某些URL包含用户名,并且甚至包含密码信息。它位于策略之后和主机名之前,“@”符号划定它的范围。如果URL不包含任何用户信息,那么这个方法返回null。Mailto URL会出现例外,在mailto:******************.edu这样的URL中,******************.edu是路径,而不是用户信息和主机名。
9)public String getAuthority()
getAuthority()返回URL的权限。包括用户信息、主机名和端口。
三.从URL检索数据
1) public final InputStream openStream() throws IOException
openStream()方法连接URL参考的资源,实现客户机和服务器之间所有必要的握手连接,并且从可读数据返回InputStream。从InputStream得到的数据是URL参考文件的原始(即没有解析过的)内容。
2) public URLConnection openConnection() throws IOException
openConnection()方法打开一个到指定URL的套接字并且返回一个URLConnection对象。URLConnection代表一个到网络资源的开放连接。
3) public final Object getContent() throws IOException
getContent()方法检索URL参考的数据,并且试图把它转换成对象的某个类型。
4) public final Object getContent(Class[] classes) throws IOException
getContent()方法的重载变量使得可以选择我们想要的类作为返回内容,这个方法试图按数组中的顺序返回URL的内容。
例如:
URL u=new URL(“”);
Class[] types=new Class[3];
types[0]=;
types[1]=;
types[2]=;
object o=tent(types);
4
然后必须用instanceof测试返回对象的类型
if (o instanceof String)
{
n(o);
}
else if (o instanceof Reader)
{
int c;
Reader r=(Reader) c;
while ((c=()) != -1)
((char) c);
}
else if (o instanceof InputStream)
{
int c;
InputStream in=(InputStream) o;
While ((c=()) != -1)
(c);
}
else
{
n(“Error:unexcepted type ”+ss());
}
四.工具方法
1) public boolean sameFile(URL other)
sameFile()方法测试测试两个URL对象是否指向同一个文件。sameFile()执行的检测非常肤浅,它只是比较相对立的字段是否相等。sameFile()和equals()有相似之处,差别在于equals()需要考虑所有任何参数,而sameFile()不考虑。此外,任何类都可以传递到equals(),却只有URL类能传递到sameFile()。
2) public String toExternalForm()
toExternalForm()和toString()方法相同。
五.对象方法
URL是从继承来的,所以可以访问Object类的全部方法。类似于IentAddress类的对象方法。
六.协议处理器方法
1) public static synchronized void setURLStreamHandlerFactory(URLStreamHandleFactory factory)
这个方法为应用程序设置URLStreamHandleFactory,如果已经设置了类库,则此方法触发一个通用Error。
2) public void set(String protocol,String host,int port,String authority,String userInfo,String path,String
query,String ref)
七.URLEncoder和URLDecoder类
5
oder类包含一个叫encode()的单一静态方法
public static String encode(String s)
r()把任何非文字数字字符(除了空格、下划线、连字号、句点和星号)都转换位%序列,空格被转换为加号。
URLEncoder的主要用途在于为使用GET的CGI程序的通信准备查询字符串。
URLDecoder类把所有的加号转换位空格,把所有的百分号转义符转换为相应的字符。
public static String decode(String s) throws Exception
如果字符串包含一个百分号,而其后没有两个十六进制的数字,那么就会触发一个IllegalArgumentException。这个方法传递的是非转义字符,所以用户可以传递一个完整的URL。
(三)收发电子邮件
1、用.我们可以通过任何支持sun规范中的包的JSP引擎(如JSWDK)发送mail。
(警告:使用内置的internal Sun规范包,这将影响到你的jsp程序的可移植性。)
以下scriptlet利用SmtpClient类在jsp文件中发送email。
<%@ page import="ient, .*" %>
<%
Stringfrom="*********************";Stringto="****************,****************";try{
SmtpClient client = new SmtpClient("");
(from);
(to);
PrintStream message = essage();
n("To: " + to);
n("Subject: Sending email from JSP!");
n("This was sent from a JSP page!");
n();
n("Cool beans! :-)");
n();
n("Govind Seshadri");
n("");
n();
erver();
}
catch (IOException e){
n("ERROR SENDING EMAIL:"+e);
}
%>
2、JavaMail是官方的 Java mail API(可参考
/products/javamail/ 。)
6
虽然该API比 ient更丰富或者说更复杂,但它是可移植的。这里重新创建了一个 MailSender类,它包含了 JavaMail API。如下所示:
// ms_ prefix is for MailSender class variables
// str prefix is for String
// astr prefix is for array of Strings
// strbuf prefix is for StringBuffers, etc.
public MailSender(
String strFrom, // sender
String[] astrTo, // recipient(s)
String[] astrBCC, // bcc recipient(s), optional
String strSubject, // subject
boolean debugging)
{
ms_strFrom = strFrom; // who the message is from
ms_astrTo = astrTo; // who (plural) the message is to
ms_debugging = debugging; // who (plural) the message is to
// set the host
Properties props = new Properties();
("", ms_strSMTPHost);
// create some properties and get the default Session
Session session = aultInstance(props, null);
ug(ms_debugging);
try {
// create a message
ms_msg = new MimeMessage(session);
// set the from
InternetAddress from = new InternetAddress(strFrom);
ms_m(from);
// set the to
InternetAddress[] address = new InternetAddress[];
for (int i = 0; i ; ++i)
{
address[i] = new InternetAddress(astrTo[i]);
}
ms_ipients(, address);
// set the bcc recipients
if (astrBCC != null)
{
address = new InternetAddress[];
for (int i = 0; i ; ++i)
7
{
("astrBCC[" + i + "] is: " + astrBCC[i] + "");
address[i] = new InternetAddress(astrBCC[i]);
}
ms_ipients(, address);
}
// set the subject
ms_ject(strSubject);
// set up the string buffer which will hold the message
ms_strbufMsg = new StringBuffer();
} catch (MessagingException mex) {
tackTrace();
} catch (Exception ex) {
tackTrace();
}
}
public void ms_add(String strText)
{
ms_(strText);
}
public void ms_send()
{
try {
// set the content as plain text
ms_tent(new String(ms_strbufMsg), "text/plain");
// and away
(ms_msg);
} catch (Exception ex) {
n("Caught exception in _send: " + ex);
}
}
总结:
本实验练习了1. 查找Internet地址,2. 用URL检索数据,3. 收发电子邮件的使用,基本上完成了各项任务。
8
版权声明:本文标题:《网络编程技术及应用》实验报告5 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1709177078h539132.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论