第一范文网 - 专业文章范例文档资料分享平台

合工大JAVA实验报告

来源:用户分享 时间:2025/5/26 7:23:44 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

} } } class ServerThread extends Thread{ public void run(){ try { BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //创建一个缓冲输出流,其形参为从套接字socket中获取的输入流 } 客户端代码如下: 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) { } } String str; while(true){ } str = in.readLine(); //按行读取 content.append( str+\ catch (Exception ex) { } } } } MyFrame client=new MyFrame(); 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(){ } void init(){ setLayout(new FlowLayout()); //设置窗体为流式布局 setSize(440,500); setLocation(800,100); add(new JLabel(\ip=new JTextField(\add(ip); init(); ConnectListen cListener=new ConnectListen(); SayListen sListener = new SayListen(); connect.addActionListener(cListener); //注册监听器 say.addActionListener(sListener); //注册监听器 add(new JLabel(\port=new JTextField(\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(\ //在文本区中显示\server....\\n\ 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 } class ClientThread extends Thread{ public void run(){ try { if(!str.isEmpty()){ } cin.setText(\out.println(new Date()+ \ //打印日期和str content.append(new Date()+\out.flush(); //清空缓存区 } catch (Exception ex) { } } BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));//获取socket对象的字节输入流,并将字节流最终转换为缓冲字符输入流 String str; while(true){ str = in.readLine(); //按行读取 //System.out.println (\ //喇叭响一声 content.append(str+\ //延长字符串 } } } } catch (Exception ex) { } } 测试结果: 五、实验结论、分析、思考题与心得体会 ①第一次写这个程序的时候我用的数据报通信DatagramSocket和DatagramPacket来写,结果发现是UDP通信,发送一个消息只有等到对方回复后才能发送第二个消息,十分不方便。 后来用Socket和ServerSocket来写,对于我这个新手来说更加容易上手。②因为服务器的GUI界面有start 和say按钮,客户端有connect和say按钮,按钮被点击后会触发动作事件,而不同的按钮要执行不同的操作,也就意味着要写多个actionPerformed()方法,可是一个类里面只能写一个actionPerformed()方法,这可怎么办呢?后来我上网查阅资料,上网查看别人写的代码,发现可以写几个实现了ActionListener接口的内部类,在内部类中再写一个acitionPerformed()方法,这样就写了好几个不同的actionPerformed()方法,在注册监听器的时候,按钮需要实现哪种功能,就用哪个内部类的对象来监听就可以了。③在GUI的设计中设计了三个Panel,用BorderLayout来布局,分为NORTH,CENTER,SOUTH;还特意设置了JSscrollpane滚动条,防止JTextField中的内容超出容量;我也特意设计了双方对话的时间,采用的是打印new Date()。 ④在服务器中创建ServerSocket对象来接受客户端的连接请求,并指定端口号,客户端通过Socket对象来向服务器的ip和端口发送连接请求。服务器在接到连接请求后,服务器会创建一个新的Socket对象与客户端的Socket对象连接。连接成功后通过IO流来通信,服务器的输入流是客户端的输出流,服务器的输出流时客户端的输入流。

搜索更多关于: 合工大JAVA实验报告 的文档
合工大JAVA实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0dl6o4hnyg565jb3urou8mpoj7ocb000zo1_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top