互联网程序设计实验二 下载本文

实验报告(二)

课程名称:互联网程序设计 姓名:

实验名称:实验二 用SwingWorker改写线程(2学时) 一、实验目的及要求 (1)理解并掌握服务器一客户一线程通用技术框架。 (2)理解并掌握 SwingWorker后台线程技术。 二、实验环境 多媒体计算机 Windows7操作系统 JDK 8 Netbeans IDE8.2(开发语言Java) 三、实验内容 (1)重温本章完成的 Echo 一客户一线程服务器设计。 (2)学习和理解 SwingWorker这个类的用法。 四、实验步骤(或记录)及相关代码 (1)实验步骤: 重新修改页面设计: 学号: 年级:2017级

实验日期: 班级:

教师评语(成绩):

修改部分代码: 原代码: //发送 out.println(outStr); txtInput.setText(\修改后代码:

//获取要发送的消息条数

String outStr_Num = txtInputNum.getText(); int outStrNum = Integer.parseInt(outStr_Num); //发送

while (outStrNum > 0) { new Thread() { @Override

public void run() { //发送

out.println(outStr); txtInput.setText(\ } }.start(); //休眠10ms try {

Thread.sleep(10);

} catch (InterruptedException ex) {

Logger.getLogger(ClientUI.class.getName()).log(Level.SEVERE, null, ex);

}

outStrNum--; } 实验结果:

(2)用SwingWorker替代Thread 类定义ClientThread类 程序2.3(修改主要片段):

public class ServerUI extends javax.swing.JFrame {

private ServerSocket listenSocket=null; //侦听套接字

private Socket toClientSocket=null; //与客户机对话的套接字 public static int clientCounts=0; //客户数量编号 public ServerUI() { initComponents(); }

//启动服务器

private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnStartActionPerformed

try {

btnStart.setEnabled(false); //禁用按钮,避免重复启动 String hostName=txtHostName.getText();//主机名

int hostPort=Integer.parseInt(txtHostPort.getText());//端口 //构建服务器的SocketAddress格式地址 SocketAddress serverAddr=new

InetSocketAddress(InetAddress.getByName(hostName),hostPort);

listenSocket=new ServerSocket(); //创建侦听套接字 listenSocket.bind(serverAddr); //绑定到工作地址

txtArea.append(\服务器开始等待客户机连接...\\n\ } catch (IOException ex) { }

//创建一个匿名线程,用于侦听和接受客户机连接,并创建响应客户机的会话线程

new Thread(new Runnable() { public void run() { try {

while (true) { //处理客户机连接

toClientSocket=listenSocket.accept();//侦听并接受客户机连接

clientCounts++;//客户机数量加1

txtArea.append(toClientSocket.getRemoteSocketAddress()+ \客户机编号: \会话开始...\\n\

//创建客户线程clientThread,实现一客户一线程 SwingWorker,String> worker=new ClientThread(toClientSocket,clientCounts);

worker.execute();

} //end while } catch (IOException ex) {

JOptionPane.showMessageDialog(null, ex.getMessage(), \错误提示\

} }//end run() }).start();