java聊天程序源代码_第1页
java聊天程序源代码_第2页
java聊天程序源代码_第3页
java聊天程序源代码_第4页
java聊天程序源代码_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论