互联网程序设计实验二

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告(二)

课程名称:互联网程序设计年级:2017级实验日期:

姓名:学号:班级:

教师评语(成绩):

实验名称:实验二用SwingWorker

改写线程(2学时)

一、实验目的及要求

(1)理解并掌握服务器一客户一线程通用技术框架。

(2)理解并掌握SwingWorker后台线程技术。

二、实验环境

多媒体计算机Windows7操作系统JDK 8 Netbeans IDE8.2(开发语言Java)

三、实验内容

(1)重温本章完成的Echo 一客户一线程服务器设计。

(2)学习和理解SwingWorker这个类的用法。

四、实验步骤(或记录)及相关代码

(1)实验步骤:

重新修改页面设计:

修改部分代码:

原代码:

//发送

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()+ " 客户机编号:

"+clientCounts+ " 会话开始...\n");

//创建客户线程clientThread,实现一客户一线程

SwingWorker,String> worker=new ClientThread(toClientSocket,clientCounts);

worker.execute();

} //end while

} catch (IOException ex) {

JOptionPane.showMessageDialog(null,

ex.getMessage(), "错误提示", JOptionPane.ERROR_MESSAGE);

}

}//end run()

}).start();

相关文档
最新文档