网络编程设计实验指导书

实验一 JavaEE初级编程(2 学时)

1、实验目的

(1)掌握Java程序运行环境的安装与配置。

(2)掌握Tomcat服务器的安装及环境配置方法。

(3)掌握对MyEclipse的集成开发环境的配置,为Java EE程序的实验做好准备工作。

(4)掌握编写与运行JSP程序的方法。

(5)掌握JSP语言的基本编程方法,了解JSP中各种元素及标签的使用。

2、基本要求:

(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。

(2)独立完成所布置习题。

(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。

(4)认真完成每次实验,并写出实验报告。

3、实验内容和步骤:

(1)安装JDK软件包。

(2)设置环境变量,包括设置Java的运行路径和classpath。

(3) 安装tomcat服务器,并了解服务器的文件结构。

(4)安装MyEclipse,学会在该环境中如何配置Tomcat服务器,完成Java EE项目的部署及运行。

(5)建立一个项目user,在其中首先创建一个注册页面,要求在注册页面中输入用户注册信息,如果注册成功,则给出成功提示,如果注册失败,则将页面返回到注册页面,并给出错误提示。

? 建立一个SQLServer数据库Test,在其中建立数据表user,表中包含用户注册时所需

要的各种信息字段,包括username,password,sex,age,hobby等,并向其中输入几条用户信息。

? 建立一个JSP 注册页面regist.jsp,

? 在其中通过form表单输入注册所需要的用户名称userName,用户密码

userPassword,重复密码RUserPassword,用户性别userSex及年龄userAge还有

用复选框表示的用户爱好hobby等信息,

? 输入信息之后通过点击提交按钮submit,将这些信息提交到另一个

regist_User.jsp页面。

? 在regist_User.jsp页面中完成数据库的验证,根据验证结果给出提示,并转到相应的

处理页面。

? 首先利用jdbc进行SQLServer数据库连接,再调用Statement执行查询语句验证

用户名是否已存在于数据库中,如果已存在,则将页面重定向到regist.jsp进行

重新注册,并给出错误提示;如果用户名不存在则将用户的信息利用Statement

保存到数据库中并返回注册成功的信息。

实验二 基于Java EE架构程序设计(2 学时)

1、实验目的:

(1)理解 Java EE架构,掌握JSP,Servlet和JavaBean的使用。

(2)掌握JSP 隐含对象的使用,尤其是request,session以及Application的使用

(3)理解JavaEE中过滤器的功能及使用方法。

2、基本要求:

(1)注意自始至终贯彻课程中所介绍的Java EE程序设计风格,养成良好的编程习惯。

(2)独立完成所布置习题。

(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。

(4)认真完成每次实验,并写出实验报告。

3、实验内容与步骤:

在项目user中建立用户登录页面,login.jsp,实现用户登录操作,然后利用隐含对象将用户的登录参数传递给Servlet程序loginServlet,并同时转到loginServlet上进行登录验证,如果登录成功,转入系统欢迎页面user/welcome.jsp页面,如果登录失败则返回登录页面。

(1) 定义表示用户的JavaBean类User,User的属性包括username,userpassword,sex,

age,hobby;方法包括设置username、设置password、设置sex,设置age,设置hobby,获取username、获取password、获取sex,获取age,获取hobby。

(2) 创建login.jsp页面,在其中建立form表单,添加文本框和密码框控件,分别向其

中输入用户名和密码,然后通过提交按钮,将它提交给后台的servlet程序的url映射名。

(3) 建立工具类jdbcUtil.java,在其中建立getConnection得到数据库连接。

(4) 在创建loginServlet.java,首先从request中提取客户端传递过来的参数,再通

过调用工具类jdbcUtil取得数据库连接,通过查询语句将参数和数据库进行核对,如果用户输入的用户名称和密码不正确,给出错误提示,并将页面重定向到regist.jsp,如果用户输入的用户名和密码正确,进入系统欢迎页面。

(5) 建立loginServlet后再到Web.xml中对servlet进行部署。

(6) 为user文件夹中的所有文件添加过滤器,建立过滤器userfilter.java,在该过滤

器中实现只有登录用户才能访问user文件夹下的页面,如果用户未登录拒绝其访问该文件夹下的所有页面。

(7) 在Web.xml中对userFilter进行部署,设置激活条件。

实验三 IE小型浏览器的设计与实现(2 学时)

1、实验目的:

(1)掌握InetAdress的概念与应用

(2)掌握URL的概念

(3)掌握URL与URL Collection类的应用

2、基本要求:

(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。

(2)独立完成所布置习题。

(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。

(4)认真完成每次实验,并写出实验报告。

3、实验内容与步骤:

(1)利用Java扩展包java.swing提供的JEditorPane类,来显示指定的网络资源的内容,能生成并响应超链接事件。

public class browser extends JFrame{

JLabel jlabel; JTextField jtf; JEditorPane edpl;

//定义无参构造方法,对程序进行初始化

public browser(){

super("browser"); Container con=getContentPane(); jlabel=new JLabel("请输入要访问的网址:"); jtf=new JTextField(""); jtf.addActionListener(new MyEnter()); JPanel panel=new JPanel(); panel.setLayout(new GridLayout(2,1)); panel.add(jlabel); panel.add(jtf); con.add(panel,BorderLayout.NORTH); edpl=new JEditorPane(); edpl.setEditable(false);

} edpl.addHyperlinkListener(new MyHyperListener()); con.add(new JScrollPane(edpl),BorderLayout.CENTER); setSize(600,800); setVisible(true);

// JEditorPane根据参数调用响应的页面

void getPage(String site){

try{ } catch(IOException e){JOptionPane.showMessageDialog(this,"连接错误","错误提示",JOpti edpl.setPage(site); //在edpl中显示指定网页 onPane.ERROR_MESSAGE);

}

}

//处理输入网址时的回车操作

class MyEnter implements ActionListener {

}

//处理网页中的超链接

class MyHyperListener implements HyperlinkListener{

}

public void actionPerformed(ActionEvent e){ } String string=jtf.getText(); getPage(string); public void hyperlinkUpdate(HyperlinkEvent e){ if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED){ String string=e.getURL().toString();//获取超链接指向的地址 getPage(string);//显示超链接指向的网页内容 } }

//建立主函数,对该类进行实例化

public static void main(String args[]){

browser mybrowser=new browser();

mybrowser.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

实验四 基于TCP/IP协议的单客户/服务器Socket编程应用

(2 学时)

1、实验目的:

(1)掌握基于TCP/IP协议的流套接字的概念与应用

(2)掌握ServerSocke和Socket的概念与应用

(3) 掌握基于TCP/IP协议的C/S模式的编程应用

2、基本要求:

(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。

(2)独立完成所布置习题。

(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。

(4)认真完成每次实验,并写出实验报告。

3、实验内容和步骤:

1、建立服务器端程序

(1)talkserver.java,实现与客户的数据通信 :

import java.io.*;

import java.net.*;

public class talkServer {

//主函数

public static void main(String args[]){

ServerSocket server;

Socket socket;

String s;

try{

//建立ServerSocket,针对指定端口进行侦听

server=new ServerSocket(2000);

System.out.println("等待连接……");

socket=server.accept();

//侦听到客户端请求时,则接收请求,建立连接

System.out.println("连接成功"); System.out.println("*******************"); System.out.print(""); //建立和socket绑定的输入输出流,在服务器与客户端之间进行通信 InputStream in=socket.getInputStream(); OutputStream out=socket.getOutputStream(); DataInputStream din=new DataInputStream(in); DataOutputStream dout=new DataOutputStream(out); //建立从键盘进行输入的输入流

BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));

System.out.println("等待客户发送信息");

//进入死循环,实现客户端与服务器之间的信息交互

while(true){

System.out.println("");

System.out.println("");

s=din.readUTF();

System.out.println("从客户端接收到的信息为"+s);

if(s.trim().equals("BYE")) break;

System.out.print("请输入你要发送的信息");

s=sin.readLine();

dout.writeUTF(s);

if(s.trim().equals("BYE")) break;

}

din.close();

dout.close();

in.close();

out.close();

socket.close();

}catch(IOException e){

System.out.println("Error:"+e);

}

}

}

2.建立客户端程序

(1)talkclient.java,实现与服务器的数据通信

//客户端程序,用来向服务器端发出请求并进行通信

import java.io.*;

import java.net.*;

public class talkclient {

public static void main(String[] args) {

Socket socket;

String s;

try {

//针对服务器指定端口建立socket,同时对服务器指定端口发出连接请求

socket=new Socket("localhost",2000);

System.out.println();

System.out.println();

System.out.println();

//建立和socket绑定的输入输出流,以及从键盘读入数据的输入流 InputStream in=socket.getInputStream();

OutputStream out=socket.getOutputStream();

DataInputStream din=new DataInputStream(in);

DataOutputStream dou=new DataOutputStream(out);

BufferedReader sin=new BufferedReader(new InputStreamReader(System.in)); //进入死循环进行服务器端和客户端的通信

while(true){

System.out.print("请输入您要发送的信息");

s=sin.readLine();

dou.writeUTF(s);

if(s.trim().equals("BYE")) break;

else{

System.out.println("");

System.out.println("");

}

s=din.readUTF();

System.out.println("从服务器接收到的信息为:"+s);

if(s.trim().equals("BYE")) break;

}

din.close();

dou.close();

in.close();

out.close();

socket.close();

} catch (Exception e) {

System.out.println(e);

}

}

}

实验五 基于UDP协议的C/S模式的Socket编程应用

(2 学时)

1、实验目的:

(1)掌握基于UDP协议的数据报套接字的概念与应用

(2)掌握DatagramSocket和DatagramPacket的概念与应用

(3) 掌握基于UDP协议的C/S模式的编程应用

2、基本要求:

(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。

(2)独立完成所布置习题。

(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。

(4)认真完成每次实验,并写出实验报告。

3、实验内容和步骤:

本实验是基于UDP协议的C/S模式的图形界面通讯程序,以可视化操作模式,实现服务器与客户端之间的通信操作。

1、建立服务器端程序,利用该程序实现在客户端对指定端口进行监听,当有客户端发来连接请求时,向客户端提供服务。

(1)Serverapp_UDP.java,实现与客户的数据通信 :

package talk;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

public class Serverapp_UDP extends WindowAdapter implements ActionListener,KeyListener{

TextField str_send;

Label label;

TextArea msg;

Button send,exit;

Panel p1;

String hostname;

DatagramSocket receiveSocket,sendSocket;

DatagramPacket receivePacket,sendPacket;

public void display(){

Frame f=new Frame("在线聊天——服务器");

f.setSize(400,350);

f.setLocation(400,400);

f.setBackground(Color.red);

p1=new Panel();

f.add(p1,"South");

msg=new TextArea();

msg.setSize(100,250);

msg.setBackground(Color.white);

msg.setEditable(false);

f.add(msg);

label=new Label("发送消息");

p1.add(label);

str_send=new TextField(20);

p1.add(str_send);

str_send.addKeyListener(this);

send=new Button("发送");

p1.add(send);

send.addActionListener(this);

exit=new Button("退出");

p1.add(exit);

exit.addActionListener(this);

f.addWindowListener(this);

f.setVisible(true);

try{

sendSocket=new DatagramSocket(5000);

}catch(Exception e){

msg.append(e+"\n");

}

}

//接受信息

public void receiveMessage(){

try {

receiveSocket=new DatagramSocket(3333);

while(true){

byte[] buf=new byte[500];

receivePacket=new DatagramPacket(buf,buf.length);

receiveSocket.receive(receivePacket);

if(receivePacket.getLength()==0){

System.out.println("消息为空");

continue;

}

ByteArrayInputStream bin=new ByteArrayInputStream(receivePacket.getData());

BufferedReader reader=new BufferedReader(new InputStreamReader(bin)); msg.append("客户端:"+reader.readLine());

msg.append("\n");

reader.close();

bin.close();

}

} catch (Exception e) {

msg.append(e+"\n");

}

}

//发送信息

public void sendMessage(){

try {

String s=str_send.getText();

str_send.setText("");

msg.append("服务器:"+s+"\n");

ByteArrayOutputStream out=new ByteArrayOutputStream(); PrintStream pout=new PrintStream(out);

pout.print(s);

byte buf[]=out.toByteArray();

sendPacket=new

DatagramPacket(buf,buf.length,InetAddress.getByName(hostname),3001); sendSocket.send(sendPacket);

buf=null;

} catch (Exception err) {

msg.append(err+"\n");

}

}

public void actionPerformed(ActionEvent e) {

if(e.getSource()==send){

sendMessage();

}

if(e.getSource()==exit){

System.out.println("聊天程序已经关闭,再见!\n"); System.exit(0);

}

}

public void windowsClosing(WindowEvent e){

System.out.println("聊天程序已经关闭,再见\n");

System.exit(0);

}

public void keyPressed(KeyEvent e) {

if(e.getSource()==str_send){

if(e.getKeyChar()==KeyEvent.VK_ENTER){

sendMessage();

}

}

}

//主函数

public static void main(String args[]){

Serverapp_UDP app=new Serverapp_UDP();

app.display();

app.receiveMessage();

}

public void keyReleased(KeyEvent arg0) {

// TODO Auto-generated method stub

}

public void keyTyped(KeyEvent arg0) {

// TODO Auto-generated method stub

}

}

2.建立客户端程序Clientapp_UDP.java,实现客户端与服务之间的通信。

package talk;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

public class Clientapp_UDP extends WindowAdapter implements ActionListener,KeyListener{ TextField str_send;

Label label;

TextArea msg;

Button send,exit;

Panel p1;

DatagramSocket receiveSocket,sendSocket;

DatagramPacket receivePacket,sendPacket;

public void display(){

Frame f=new Frame("在线聊天——客户端");

f.setSize(400,350);

f.setLocation(100,100);

f.setBackground(Color.red);

p1=new Panel();

f.add(p1,"South");

msg=new TextArea();

msg.setSize(100,250);

msg.setBackground(Color.white);

msg.setEditable(false);

f.add(msg);

label=new Label("发送消息");

p1.add(label);

str_send=new TextField(20);

p1.add(str_send);

str_send.addKeyListener(this);

send=new Button("发送");

p1.add(send);

send.addActionListener(this);

exit=new Button("退出");

p1.add(exit);

exit.addActionListener(this);

f.addWindowListener(this);

f.setVisible(true);

try{

sendSocket=new DatagramSocket(3000);

}catch(IOException e){

msg.append(e+"\n");

}

}

public void receiveMessage(){

try {

receiveSocket=new DatagramSocket(3001);

while(true){

byte[] buf=new byte[500];

receivePacket=new DatagramPacket(buf,buf.length);

receiveSocket.receive(receivePacket);

ByteArrayInputStream bin=new ByteArrayInputStream(receivePacket.getData());

BufferedReader reader=new BufferedReader(new InputStreamReader(bin)); msg.append("服务器:"+reader.readLine());

msg.append("\n");

}

} catch (Exception e) {

msg.append(e+"\n");

}

}

public void sendMessage(){

try {

ByteArrayOutputStream bout=new ByteArrayOutputStream();

PrintStream pout=new PrintStream(bout);

pout.print(str_send.getText());

byte buf[]=bout.toByteArray();

sendPacket=new

DatagramPacket(buf,buf.length,InetAddress.getByName("localhost"),3333); sendSocket.send(sendPacket);

msg.append("客户端:"+str_send.getText()+"\n"); str_send.setText("");

} catch (Exception err) {

msg.append(err+"\n");

}

}

public void actionPerformed(ActionEvent e) {

if(e.getSource()==send){

sendMessage();

}

if(e.getSource()==exit){

System.out.println("聊天程序已经关闭,再见!\n"); System.exit(0);

}

}

public void windowsClosing(WindowEvent e){

System.out.println("聊天程序已经关闭,再见\n");

System.exit(0);

}

public void keyPressed(KeyEvent e) {

if(e.getSource()==str_send){

if(e.getKeyChar()==KeyEvent.VK_ENTER){

sendMessage();

}

}

}

public static void main(String[] args) {

Clientapp_UDP client=new Clientapp_UDP();

client.display();

client.receiveMessage();

}

public void keyReleased(KeyEvent arg0) {

// TODO Auto-generated method stub

}

} public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub }

实验六 利用JavaMail收发电子邮件(2学时)

1、实验目的:

(1)掌握基于UDP协议的数据报套接字的概念与应用

(2)掌握DatagramSocket和DatagramPacket的概念与应用

(3) 掌握基于UDP协议的C/S模式的编程应用

2、基本要求:

(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。

(2)独立完成所布置习题。

(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。

(4)认真完成每次实验,并写出实验报告。

3、实验内容和步骤:

本实验分成两部分,一部分是利用JavaMail实现发送带SMTP身份认证的E-mail电子邮件,一部分利用JavaMail接收电子邮件。

1) 建立JAVA项目javamail,在该项目新建类Au_SendMail.java,利用该类实现从,该邮箱密码为pm123456,向自己的个人邮箱发送一封邮

件,sohu的smtp服务器地址为:,端口为25;登录sohu的smtp

服务器时必须采用带身份验证的方式进行登陆。

import java.util.Properties;

import java.util.*;

import javax.mail.Address;

import javax.mail.Message;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.mail.*;import javax.activation.*;

public class Au_SendMail {

public static void main(String[] args) throws Exception{

String from="wlbcmail@sohu.com";

String to="wlbcmail@sina.com";//该变量定义电子邮件接收者,如果要将邮件发送到自己的账户,就必须将此处修改为用于接收的电子邮件地址

EmailAuthenticator auth=new EmailAuthenticator("wlbcmail@sohu.com" ,"pm123456"); Properties props =System.getProperties();

props.put("mail.smtp.host", "");

props.put("mail.smtp.auth", "true");

Session session = Session.getInstance(props,(Authenticator)auth);

//session.setDebug(true);

MimeMessage msg=new MimeMessage(session);

msg.setFrom(new InternetAddress(from));

msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); msg.setSubject("我是主题Subject");

String s="我是邮件发送正文 email content";

msg.setText(s);

Transport transport = session.getTransport("smtp");

transport.connect("",25,"wlbcmail@sohu.com", "pm123456"); transport.sendMessage(msg,msg.getAllRecipients());

transport.close();

System.out.print("ok");

}

}

class EmailAuthenticator extends Authenticator{

private String m_username;

private String m_userpass;

EmailAuthenticator(String username,String userpass){

super();

m_username=username;

m_userpass=userpass;

}

public PasswordAuthentication getPasswordAuthentication(){

return new PasswordAuthentication(m_username,m_userpass);

}

}

2) 在JAVA项目中建立类ReceivedMail.java,利用该类实现读取邮箱中的邮件,该邮箱密码为pm123456,pop3服务器地址

为,pop3端口号为110。

import java.util.*;

import javax.mail.*;

import javax.mail.internet.*;

import java.io.*;

public class ReceivedMail {

public static void main(String[] args) {

String pop3="";

String user="wlbcmail@sina.com";

String pass="pm123456";

try {

Properties props=System.getProperties();

Session session=Session.getInstance(props,null);

Store store=session.getStore("pop3");

store.connect(pop3, user, pass);

Folder folder=store.getFolder("INBOX");

folder.open(Folder.READ_WRITE);

Message msg[]=folder.getMessages();

for(int i=0;i<msg.length;i++){

System.out.println("From:"+msg[i].getFrom()[0]);

System.out.println("Subject:"+msg[i].getSubject()); if(((msg[i].getFrom()[0]).toString()).equalsIgnoreCase("wlbcmail@sina.com")){

String s;

BufferedReader in=new BufferedReader(new InputStreamReader(msg[i].getInpu tStream()));

System.out.println("-------Mail Text---------");

while((s=in.readLine())!=null){

System.out.println(s);

}

in.close();

}

}

folder.close(true);

store.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

相关推荐