互联网程序设计实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
程序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();