JAVA聊天室简易版1.0(多线程)(注释版)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA聊天室简易版1.0(多线程)(注释版),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3475字,纯文字阅读大概需要5分钟。
内容图文
![JAVA聊天室简易版1.0(多线程)(注释版)](/upload/InfoBanner/zyjiaocheng/1133/1af889869f744f32966c374d2f5e2ce0.jpg)
客户端
35 tfTxt.addActionListener(new TFListener()); 光标点在输入框里敲回车的时候-->执行67actionPerformed(ActionEvent e)的方法,改方法把输入的东西发出去,当然再发出去以前要先执行connect.
要退出是先调用30disconnect()这个方法,首先断开连接
1 import java.awt.*; 2import java.awt.event.*; 3import java.io.IOException; 4import java.net.*; 5import java.io.*; 6publicclass Chatclient extends Frame{ 7 8 Socket s=null; 9 DataOutputStream dos=null; 1011 TextField tfTxt=new TextField();//只有一行可以写,有一个ACTION12 TextArea taContent=new TextArea();//标签定义多行的文本输入控件131415publicstaticvoid main(String[] args) { 16new Chatclient().LaunchFrame(); 17 } 1819publicvoid LaunchFrame() 20 { 21 setLocation(400,300); 22this.setSize(300,300); 23 add(tfTxt,BorderLayout.SOUTH); 24 add(taContent,BorderLayout.NORTH); 25 pack(); 26this.addWindowListener(new WindowAdapter(){//关闭窗口2728 @Override 29publicvoid windowClosing(WindowEvent e) { 30 disconnect(); 31 System.exit(0); 32 } 3334 });//匿名类35 tfTxt.addActionListener(new TFListener()); 36 setVisible(true); 37 connect(); 38 } 3940publicvoid connect() 41 { 42try { 43 s=new Socket("127.0.0.1",8888); 44 dos=new DataOutputStream(s.getOutputStream()); 45 System.out.println("connected!"); 46 } catch (UnknownHostException e) { 47 e.printStackTrace(); 48 } catch (IOException e) { 49 e.printStackTrace(); 50 } 5152 } 5354publicvoid disconnect()//关闭方法55 { 56try{ 57 dos.close(); 58 s.close(); 59 }catch (IOException e){ 60 e.printStackTrace(); 61 } 626364 } 65privateclass TFListener implements ActionListener 66 { 67publicvoid actionPerformed(ActionEvent e) {//一敲回车68 String str=tfTxt.getText().trim(); 69 taContent.setText(str); 70 tfTxt.setText("");//回车之后清空71try { 72//DataOutputStream dos=new DataOutputStream(s.getOutputStream());73 dos.writeUTF(str);//把stream输出去74 dos.flush(); 75//dos.close();76 } catch (IOException e1) { 77 e1.printStackTrace(); 78 } 798081 } 8283 }//内部类84 }
Server端
import java.net.*; import java.io.*; publicclass Chatserver { boolean started=false;//有没有监听好 ServerSocket ss=null;//初始化publicstaticvoid main(String[] args) { new Chatserver().start(); } publicvoid start() { try { ss=new ServerSocket(8888);//端口号8888,TCP,监听在8888端口 started=true;//连接上 }catch (BindException e){ System.out.println("端口使用中"); System.exit(0); }catch(IOException e){ e.printStackTrace();//给出方法的调用程序,一直到异常的产生位置 } try{ while(started)//已经启动 { Socket s=ss.accept();//已经启动不断接收客户端的连接 Client c=new Client(s);//接收进来以后起一个线程 System.out.println("a client connected!"); new Thread(c).start();//让这个线程启动,为它服务 //dis.close(); } }catch (IOException e) { e.printStackTrace(); }finally{ try { ss.close(); }catch(IOException e){ e.printStackTrace(); } } } } class Client implements Runnable{//线程内部类private Socket s;//包装的每个客户端一个单独的Socket,一个半连接private DataInputStream dis=null;//每个客户端都保有自己的inputStream;从Socket里面赌内容的输入管道 //保留有自己的连接privateboolean bConnected=false;//是否连上,初始化falsepublic Client(Socket s){//传递Socket这个属性,构造函数this.s=s;//初始化try { dis=new DataInputStream(s.getInputStream());//初始化 bConnected=true;//连上以后等于TRUE } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } publicvoid run(){//单独的线程为单独的客户端服务 //接收到对方之后变成truetry{ while(bConnected){//有东西来就读 String str=dis.readUTF();//阻塞式,接受客户端给我的字符串且打印 System.out.println(str); } }catch (EOFException e){ System.out.println("Client closed!"); } catch (IOException e) { e.printStackTrace(); }finally{ try{ if(dis !=null) dis.close(); }catch(IOException e1){ e1.printStackTrace(); } } } }
原文:http://www.cnblogs.com/Ljj-Nancy/p/5469133.html
内容总结
以上是互联网集市为您收集整理的JAVA聊天室简易版1.0(多线程)(注释版)全部内容,希望文章能够帮你解决JAVA聊天室简易版1.0(多线程)(注释版)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。