下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、服务端:import java.io.*;import .*;import java.util.*;public class ChatServer boolean stat = false; ServerSocket ss = null; List clients = new ArrayList();/用于存客户端 public static void main(String args) new ChatServer().start(); public void start() try ss = new ServerSocket(8888); stat = true; catc
2、h(BindException e) /Sever端已经运行,当重复运行时抛异常 System.out.println(端口正在使用中。); System.out.println(请关掉相关程序并重新运行服务器!); /还会抛别的异常,所以直接关闭窗口 System.exit(0); catch(IOException e) e.printStackTrace(); try while(stat) Socket s = ss.accept();System.out.println(a client connected! ); /测试语句写在最左边,以后没用可以删除或注掉 Client c =
3、new Client(s); /每建立一个客户端,就new一个客户端对象,启动一个线程 new Thread(c).start(); clients.add(c); /勿忘写,将每个客户端加入到容器里 catch (IOException e) e.printStackTrace(); finally try ss.close(); catch (IOException e) e.printStackTrace(); class Client implements Runnable private Socket s; private DataInputStream dis; private D
4、ataOutputStream dos; private boolean cont = false; public Client(Socket s) this.s = s; try dis = new DataInputStream(s.getInputStream();/初始化 dos = new DataOutputStream(s.getOutputStream(); cont = true; catch (IOException e) e.printStackTrace(); public void send(String str) /用于发送给客户端 try dos.writeUTF
5、(str); catch (IOException e) clients.remove(this); /移除那个退出的对象 System.out.println(一个客户退出了); /e.printStackTrace(); public void run() try while(cont) String str = dis.readUTF(); /阻塞式方法System.out.println(str); for(int i=0; iclients.size(); i+) Client c = clients.get(i); /取客户端 c.send(str); /* 另外两种方法,但不适用
6、,它会锁定服务端 for(Iterator it = clients.iterator(); it.hasNext();) Client c = it.next(); c.send(str); Iterator it = clients.iterator(); while(it.hasNext() Client c = it.next(); c.send(str); */ catch (EOFException e) /readUTF()阻塞式方法,所以关闭客户端会抛异常 System.out.println(Client closed!); catch (IOException e) e.p
7、rintStackTrace(); finally try if(dis != null) dis.close(); if(dos != null) dos.close(); if(s != null) s.close(); s = null;/更严格的方法,等于空就没人去用了,垃圾收集器就回收走 catch (IOException e) e.printStackTrace(); 客户端:import java.awt.*;import java.awt.event.*;import java.io.*;import .*;public class ChatClient ex
8、tends Frame Socket s = null; DataOutputStream dos = null; DataInputStream dis = null; private boolean cont = false; TextField tfTxt = new TextField(); TextArea taContent = new TextArea(); Thread tRecv = new Thread(new RecvThread(); public static void main(String args) new ChatClient().launchFrame();
9、 public void launchFrame() setLocation(400, 300); this.setSize(300, 300); add(tfTxt,BorderLayout.SOUTH); add(taContent,BorderLayout.NORTH); pack(); /包在一起,去掉中间空着的 this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) disconnect(); System.exit(0); ); tfTxt.addActionListen
10、er(new TfListent(); setVisible(true); connect(); tRecv.start(); /启动线程 public void connect() try s = new Socket(,8888);/注意不要定义成Socket s,这就成了局部变量而不是成员变量了System.out.println(connected!); dos = new DataOutputStream(s.getOutputStream(); dis = new DataInputStream(s.getInputStream(); cont = true; c
11、atch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); public void disconnect() try dos.close(); dis.close(); s.close(); catch (IOException e) e.printStackTrace(); /*/无法解决readUTF阻塞式方法 try cont = false; /关闭线程 tRecv.join(); /合并线程,彻底让他停止 catch (InterruptedExceptio
12、n e) e.printStackTrace(); finally try dos.close(); /线程停止之后才能关流,不然抛SocketException异常 dis.close(); s.close(); catch (IOException e) e.printStackTrace(); */ private class TfListent implements ActionListener public void actionPerformed(ActionEvent e) String str = tfTxt.getText().trim(); tfTxt.setText(); try dos.writeUTF(str); dos.flush(); catch (IOException e1) e1.printStackTrace(); private class RecvThread implements Runnable public void run() try while(cont) String str = dis.readUTF(); taContent.setText(taContent.getText() + str + n); catch (SocketException e) System.out.println(退出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44075-2024纳米技术表面增强拉曼固相基片均匀性测量拉曼成像分析法
- GB/T 30102-2024塑料废弃物的回收和再利用指南
- 开发商与物业公司间物业管理服务协议(3篇)
- 短期合同工劳动协议(2024年修订版)2篇
- 设备安装及技术咨询合同
- 诚信招聘承诺保证书
- 质优砂砾销售合同
- 质量稳定承诺保证书
- 购物无忧的品质保证
- 购销合同中的跨界合作与拓展
- 企业财务会计电子教案 10存货核算4
- 定期体检 预防常见病 课件 2024-2025学年人教版(2024)初中体育与健康七年级全一册
- 现代服务业课件
- 生活饮用水、公共场所卫生管理系列国家强制性标准解读答案-2024年全国疾控系统“大学习”活动
- 教师成长案例数字赋能 创新教学 启智未来
- 2024-2030年中国海洋工程行业市场发展分析及前景趋势与投资前景研究报告
- 消化内科五年发展规划
- 多水源联合调度技术
- 2024市场场地租赁保证金合同范本
- 中学生网络安全教育主题班会
- 大班绘本阅读《小老鼠的探险日记》教案含反思
评论
0/150
提交评论