JavaSE基础小结--1---基于TCP的聊天程序

服务器代码:

Code:
  1. package cn.itcast.chat;    
  2.   
  3. import java.awt.Frame;    
  4. import java.awt.TextArea;    
  5. import java.awt.event.WindowAdapter;    
  6. import java.awt.event.WindowEvent;    
  7. import java.io.BufferedReader;    
  8. import java.io.IOException;    
  9. import java.io.InputStreamReader;    
  10. import java.io.PrintWriter;    
  11. import java.net.ServerSocket;    
  12. import java.net.Socket;    
  13. import java.util.ArrayList;    
  14. import java.util.List;    
  15.   
  16. public class ChatServer {    
  17.   
  18.         private Frame frame;    
  19.         private TextArea infoArea;    
  20.         private List<Socket> list;    
  21.         public ChatServer() {    
  22.                 list = new ArrayList();    
  23.                 init();    
  24.         }    
  25.   
  26.         public void init() {    
  27.                 frame = new Frame("聊天的服务端");    
  28.                 frame.setBounds(300200400400);    
  29.                 infoArea = new TextArea();    
  30.   
  31.                 frame.add(infoArea);    
  32.   
  33.                 myEvent();    
  34.                 frame.setVisible(true);    
  35.         }    
  36.   
  37.         public void myEvent() {    
  38.                 frame.addWindowListener(new WindowAdapter() {    
  39.   
  40.   
  41.                         @Override    
  42.                         public void windowClosing(WindowEvent e) {    
  43.                                     
  44.                                     
  45.                                 for(Socket s : list){    
  46.                                         try {    
  47.                                                 s.shutdownOutput();    
  48.                                         } catch (IOException e1) {    
  49.                                                 System.out.println("server shut out ");    
  50.                                         }    
  51.                                 }    
  52.                                 System.exit(0);    
  53.                         }    
  54.   
  55.                 });    
  56.         }    
  57.   
  58.         public void connection(){    
  59.                 try {    
  60.                         ServerSocket ss = new ServerSocket(30000);    
  61.                             
  62.                         while(true){    
  63.                                 Socket socket = ss.accept();    
  64.                                 String ip = socket.getInetAddress().getHostAddress();    
  65.                                 list.add(socket);    
  66.                                 infoArea.append(ip+"已进入到聊天室/r/n");    
  67.                                 ServerThread st = new ServerThread(list,socket,infoArea);    
  68.                                 new Thread(st).start();    
  69.                         }    
  70.                 } catch (IOException e) {    
  71.                         System.out.println("监听端口失败");    
  72.                 }    
  73.         }    
  74.         public static void main(String[] args) {    
  75.                 new ChatServer().connection();    
  76.         }    
  77.   
  78. }    
  79.   
  80.   
  81. class ServerThread implements Runnable{    
  82.   
  83.         private Socket socket;    
  84.         private List<Socket> list;    
  85.         private TextArea infoArea;    
  86.         public ServerThread(List<Socket> list,Socket socket,TextArea infoArea) {    
  87.                     
  88.                 this.list = list;    
  89.                 this.socket = socket;    
  90.                 this.infoArea = infoArea;    
  91.         }    
  92.             
  93.         @Override    
  94.         public void run() {    
  95.                     
  96.                 try {    
  97.                             
  98.                         String ip = socket.getInetAddress().getHostAddress();    
  99.                         BufferedReader bufr =     
  100.                                 new BufferedReader(new InputStreamReader(socket.getInputStream()));    
  101.                             
  102.                         String line = null;    
  103.                         while((line=bufr.readLine())!=null){    
  104.                                     
  105.                                 for(Socket s : list){    
  106.                                         PrintWriter out = new PrintWriter(s.getOutputStream(),true);    
  107.                                         out.println(ip+":"+line);    
  108.                                 }    
  109.                                     
  110.                         }    
  111.                             
  112.                         if(socket!=null){    
  113.                                 socket.close();    
  114.                                 infoArea.append(ip+"已离开聊天室!!!!!!/r/n");    
  115.                                 list.remove(socket);    
  116.                         }    
  117.                             
  118.                 } catch (IOException e) {    
  119.                         System.out.println("server thread exception "+e.toString());    
  120.                 }    
  121.         }    
  122.             
  123. }   

客户端代码:

Code:
  1. package cn.itcast.chat;    
  2.   
  3. import java.awt.Button;    
  4. import java.awt.Color;    
  5. import java.awt.FlowLayout;    
  6. import java.awt.Frame;    
  7. import java.awt.TextArea;    
  8. import java.awt.event.ActionEvent;    
  9. import java.awt.event.ActionListener;    
  10. import java.awt.event.WindowAdapter;    
  11. import java.awt.event.WindowEvent;    
  12. import java.io.BufferedReader;    
  13. import java.io.IOException;    
  14. import java.io.InputStreamReader;    
  15. import java.io.PrintWriter;    
  16. import java.net.Socket;    
  17. import java.net.UnknownHostException;    
  18.   
  19. public class ChatClient {    
  20.   
  21.         private Frame frame;    
  22.         private TextArea receArea,sendArea;    
  23.         private Button sendBut;    
  24.         private Socket socket;    
  25.         public ChatClient(){    
  26.                 init();    
  27.                     
  28.                     
  29.         }    
  30.             
  31.         public void init(){    
  32.                 frame = new Frame("聊天的客户端");    
  33.                 frame.setBounds(300200500420);    
  34.                 frame.setLayout(new FlowLayout(FlowLayout.RIGHT));    
  35.                     
  36.                 receArea = new TextArea(14,65);    
  37.                 receArea.setEditable(false);    
  38.                 receArea.setBackground(Color.white);    
  39.                 sendArea = new TextArea(6,65);    
  40.                     
  41.                 sendBut = new Button("发  送");    
  42.                     
  43.                 sendBut.setEnabled(false);    
  44.                 frame.add(receArea);    
  45.                 frame.add(sendArea);    
  46.                 frame.add(sendBut);    
  47.                     
  48.                 myEvent();    
  49.                     
  50.                     
  51.                 frame.setResizable(false);    
  52.                 frame.setVisible(true);    
  53.                     
  54.                 initConnection();    
  55.         }    
  56.         public void myEvent(){    
  57.                 sendBut.addActionListener(new ActionListener() {    
  58.                             
  59.                         @Override    
  60.                         public void actionPerformed(ActionEvent e) {    
  61.                                     
  62.                                 if(socket!=null && socket.isClosed()){    
  63.                                         receArea.append("通讯中断");    
  64.                                         sendBut.setEnabled(false);    
  65.                                         return;    
  66.                                 }    
  67.                                     
  68.                                 String text = sendArea.getText();    
  69.                                 try {    
  70.                                         PrintWriter out = new PrintWriter(socket.getOutputStream(),true);    
  71.                                             
  72.                                         out.println(text);    
  73.                                 } catch (IOException e1) {    
  74.                                             
  75.                                 }    
  76.                                     
  77.                                 sendArea.setText("");    
  78.                         }    
  79.                 });    
  80.                     
  81.                     
  82.                     
  83.                 frame.addWindowListener(new WindowAdapter() {    
  84.                             
  85.                         @Override    
  86.                         public void windowOpened(WindowEvent e) {    
  87.                                     
  88.                                 sendArea.requestFocus();    
  89.                         }    
  90.   
  91.                         @Override    
  92.                         public void windowClosing(WindowEvent e) {    
  93.                                     
  94.                                 if(socket!=null){    
  95.                                         try {    
  96.                                                 socket.shutdownOutput();    
  97.                                         } catch (IOException e1) {    
  98.                                                 System.out.println("shut out");    
  99.                                         }    
  100.                                 }    
  101.                                     
  102.                                 System.exit(0);    
  103.                         }    
  104.                             
  105.                 });    
  106.         }    
  107.             
  108.             
  109.         public void initConnection(){    
  110.                 try {    
  111.                         socket = new Socket("192.168.1.254",30000);    
  112.                 } catch (UnknownHostException e) {    
  113.                         receArea.append("未知主机");return;    
  114.                 } catch (IOException e) {    
  115.                         receArea.append("网络服务失败");return;    
  116.                 }    
  117.                 sendBut.setEnabled(true);    
  118.                     
  119.                 ClientThread ct =new ClientThread(socket, receArea);    
  120.                 new Thread(ct).start();    
  121.         }    
  122.             
  123.         public static void main(String[] args) {    
  124.                 new ChatClient();    
  125.         }    
  126.   
  127. }    
  128.   
  129.   
  130. class ClientThread implements Runnable{    
  131.         private Socket socket;    
  132.         private TextArea receArea;    
  133.             
  134.         ClientThread(Socket socket,TextArea receArea){    
  135.                 this.socket = socket;    
  136.                 this.receArea = receArea;    
  137.         }    
  138.         @Override    
  139.         public void run() {    
  140.                 BufferedReader bufr = null;    
  141.                 try {    
  142.                         bufr =     
  143.                                 new BufferedReader(new InputStreamReader(socket.getInputStream()));    
  144.                             
  145.                         String line = null;    
  146.                         while((line=bufr.readLine())!=null){    
  147.                                 receArea.append(line+"/r/n");    
  148.                         }    
  149.                             
  150.                         if(socket!=null){    
  151.                                 socket.close();    
  152.                         }    
  153.                 } catch (IOException e) {    
  154.                         System.out.println("client thread exception"+e.toString());    
  155.                 }    
  156.         }    
  157.             
  158. }   

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值