教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

合工大Java实验报告(6)

来源:网络收集 时间:2026-07-23
导读: } str = in.readLine(); //按行读取 content.append( str+\); } } catch (Exception ex) {} } } 客户端代码: import java.awt.*; import java.awt.event.*; import java.util.*; import java.io.*; import java.ne

} str = in.readLine(); //按行读取 content.append( str+\); } } catch (Exception ex) {} } } 客户端代码: import java.awt.*; import java.awt.event.*; import java.util.*; import java.io.*; import java.net.*; import javax.swing.*; import java.util.Calendar; public class Client{ public static void main(String[] args) { MyFrame client=new MyFrame(); client.setTitle(\客户端\); client.setVisible(true); client.setResizable(false); //设置此窗体是否可由用户调整大小 client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭操作 } } class MyFrame extends JFrame { JTextField ip; JTextField port; JTextField cin; JTextArea content; JButton connect; JButton say; Socket socket; MyFrame(){ init(); ConnectListen cListener=new ConnectListen(); SayListen sListener = new SayListen(); connect.addActionListener(cListener); //注册监听器 say.addActionListener(sListener); //注册监听器 } void init(){

setLayout(new FlowLayout()); //设置窗体为流式布局 setSize(440,500); setLocation(800,100); add(new JLabel(\)); ip=new JTextField(\,8); add(ip); add(new JLabel(\)); port=new JTextField(\,8); add(port); connect=new JButton(\); add(connect); content=new JTextArea(16,35); JScrollPane scroll=new JScrollPane(content); //设置滚动条 add(scroll); add(new Label(\)); cin=new JTextField(\你好!\,25); add(cin); say=new JButton(\); add(say); } class ConnectListen implements ActionListener{ int portNum; public void actionPerformed(ActionEvent e){ connect.setEnabled(false); //按下 connect 按钮后, connect 不可再次点击 try { content.setText(\); //在文本区中显示 \ portNum =Integer.parseInt(port.getText()); //读取 port 文本框中的字符串,并将字符串转化为整型赋给 portNum socket = new Socket(ip.getText(),portNum); //定义对象 socket,并指定主机号(host)和端口号 portNum ClientThread ct = new ClientThread(); //定义一个 ClientThread 类的对象 ct ct.start(); //启动一个线程,并调用ClientThread 类中的 run()方法 } catch (Exception ex) {} } } class SayListen implements ActionListener{ String str; public void actionPerformed(ActionEvent e){ try { PrintWriter out = new PrintWriter(new

BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); //从 socket 获取字节输出流,并将其最终转化为 PrintWriter str=cin.getText(); //从文本框中获取字符串赋给 str if(!str.isEmpty()){ out.println(new Date()+ \+ str); //打印日期和 str content.append(new Date()+\+str+\); out.flush(); //清空缓存区 } cin.setText(\); } catch (Exception ex) {} } } class ClientThread extends Thread{ public void run(){ try { BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //创建一个缓冲输出流,其形参为从套接字 socket 中获取的输入流 String str; while(true){ str = in.readLine(); //按行读取 content.append( str+\); } } catch (Exception ex) {} } } } 运行结果:

五、实验结论、分析、思考题与心得体会 通过本次实验,我对于GUI程序的便编写,以及网络通信与多线程编程有了一定的了解,并且也亲自实现了一个基于GUI的客户-服务器的通信应用程序,在实验过程中,我也遇到了不少的问题并加以解决: 1.因为服务器的GUI界面有start和say按钮,客户端有connect和say按钮,按钮被点击后会触发动作事件。而不同的按钮要执行不同的操作,也就意味着要写多个actionPerformed()方法,可是一个类里面只能写一个actionPerformed()方法,因此可以写几个实现了ActionPerformed()方法,在内部类中再写一个actionPerformed()方法,这样就写了好几个不同的actionPerformed()方法,在注册监听器的时候,按钮需要实现哪种功能,就用哪个内部类的对象来监听就可以了。 2.在服务器中创建 ServerSocket 对象来接受客户端的连接请求, 并指定端口号, 客户端通过Socket 对象来向服务器的 ip 和端口发送连接请求。服务器在接到连接请求后,服务器会创建一个新的 Socket 对象与客户端的 Socket 对象连接。连接成功后通过 IO 流来通信,服务器的输入流是客户端的输出流,服务器的输出流时客户端的输入流

…… 此处隐藏:1200字,全部文档内容请下载后查看。喜欢就下载吧 ……
合工大Java实验报告(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/447877.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)