JAVA聊天器_服务端

来源:互联网 发布:nice软件电脑版 编辑:程序博客网 时间:2024/05/16 23:37
Code:
  1. import java.io.*;  
  2. import java.net.*;   
  3. import javax.swing.*;  
  4. import java.awt.*;  
  5. import java.awt.event.*;  
  6.   
  7. //目前还有一个BUG就是每次服务器发完话之后必须等待回答后才能再次发话,BUG谨存在服务端  
  8.       
  9. class threadServer extends EdServer implements Runnable  
  10. {  
  11.   
  12.     public void run() {  
  13.         // TODO Auto-generated method stub  
  14.         while(true)  
  15.         {  
  16.         go();  
  17.         }  
  18.     }  
  19.     public synchronized void go()  
  20.     {  
  21.             try {  
  22.                 sock = serverSock.accept();  
  23.                 reader= new InputStreamReader(sock.getInputStream());  
  24.                 bufferReader = new BufferedReader(reader);  
  25.                 receiveString = bufferReader.readLine();  
  26.                 System.out.println(receiveString);  
  27.                 receiveText.setText(receiveString);  
  28.                   
  29.             } catch (IOException e) {  
  30.                 // TODO Auto-generated catch block  
  31.                 e.printStackTrace();  
  32.             }  
  33.     }  
  34. }  
  35. public class EdServer {  
  36.   
  37.     /** 
  38.      * server 
  39.      */  
  40.     static int port;  
  41.     static JButton portConfirmButton,rePort;  
  42.     static JTextField transferText,receiveText;  
  43.     static JTextField portText;  
  44.     static JButton sentConfirm;  
  45.     static Socket sock;  
  46.     static String receiveString,transferString;  
  47.     static ServerSocket serverSock;  
  48.     static BufferedReader bufferReader;  
  49.     static InputStreamReader reader;  
  50.       
  51.     public void ui()  
  52.     {  
  53.         JFrame frame = new JFrame("聊天服务端_徐方鑫");  
  54.         JPanel panel = new JPanel();  
  55.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  56.         frame.add(panel);  
  57.         Box panelMain = Box.createVerticalBox();  
  58.         panel.add(panelMain);  
  59.         {  
  60.             Box portMain = Box.createHorizontalBox();  
  61.             {  
  62.                 panelMain.add(portMain);  
  63.                 JLabel ipLabel = new JLabel("ip:");  
  64.                 JTextField ipText = new JTextField(15);  
  65.                 ipText.setEnabled(false);  
  66.                 portMain.add(ipLabel);  
  67.                 portMain.add(ipText);  
  68.                 {  
  69.                     //这里为IP获取程序,IP为SOCKET的IP,address为MAC地址  
  70.                     String IP = null, address = null;  
  71.                     InetAddress addr;  
  72.                     try {  
  73.                     addr = InetAddress.getLocalHost();  
  74.                     IP = addr.getHostAddress().toString();  
  75.                     address = addr.getHostName().toString();  
  76.                     System.out.println(IP);  
  77.                     System.out.println(address);  
  78.                     } catch (UnknownHostException e) {  
  79.                      //TODO Auto-generated catch block  
  80.                        e.printStackTrace();  
  81.                     }  
  82.                     ipText.setText(IP);  
  83.                 }  
  84.                 JLabel portLabel = new JLabel("port:");  
  85.                 portMain.add(portLabel);  
  86.                 portText = new JTextField("5000",8);  
  87.                 portText.setHorizontalAlignment(JTextField.CENTER);  
  88.                 portMain.add(portText);  
  89.             }  
  90.             Box portConfirm = Box.createHorizontalBox();  
  91.             {  
  92.                 panelMain.add(portConfirm);  
  93.                 portConfirmButton = new JButton("确定");  
  94.                 rePort = new JButton("重置");  
  95.                 //portConfirm.add(portConfirmButton);  
  96.                 {  
  97.                     portConfirmButton.addActionListener(new ActionListener()  
  98.                     {  
  99.                         public void actionPerformed(ActionEvent e)  
  100.                         {  
  101.                             port=Integer.valueOf(portText.getText()).intValue();  
  102.                             System.out.println(port);  
  103.                             try {  
  104.                                 serverSock = new ServerSocket(port);  
  105.                             } catch (IOException e1) {  
  106.                                 // TODO Auto-generated catch block  
  107.                                 e1.printStackTrace();  
  108.                             }  
  109.                             Runnable runnable = new threadServer();  
  110.                             Thread sockThread = new Thread(runnable);  
  111.                             sockThread.start();  
  112.                         }  
  113.                     });  
  114.                 }  
  115.                 //portConfirm.add(rePort);  
  116.                 {  
  117.                     rePort.addActionListener(new ActionListener()  
  118.                     {  
  119.                         public void actionPerformed(ActionEvent e)  
  120.                         {  
  121.                             portText.setText("5000");  
  122.                             transferText.setText(null);  
  123.                             receiveText.setText(null);  
  124.                         }  
  125.                     });  
  126.                 }  
  127.                   
  128.             }  
  129.         }  
  130.           
  131.         Box receiveMain = Box.createHorizontalBox();  
  132.         panelMain.add(receiveMain);  
  133.         {  
  134.             JLabel receive = new JLabel("接收:");  
  135.             receiveMain.add(receive);  
  136.             receiveText = new JTextField(20);  
  137.             receiveMain.add(receiveText);  
  138.             receiveText.enable(false);  
  139.         }  
  140.         Box transferMain = Box.createHorizontalBox();  
  141.         panelMain.add(transferMain);  
  142.         {  
  143.             JLabel transfer = new JLabel("发送:");  
  144.             transferMain.add(transfer);  
  145.             transferText = new JTextField(20);  
  146.             transferMain.add(transferText);  
  147.         }  
  148.           
  149.         Box talkConfirm = Box.createHorizontalBox();  
  150.         panelMain.add(talkConfirm);  
  151.         {  
  152.             sentConfirm = new JButton("发送");  
  153.             talkConfirm.add(sentConfirm);  
  154.             talkConfirm.add(rePort);  
  155.             talkConfirm.add(portConfirmButton);   
  156.         }  
  157.           
  158.         frame.setSize(400,150);  
  159.         frame.setVisible(true);  
  160.     }  
  161.       
  162.     public static void netServer()  
  163.     {  
  164.             try {  
  165.                 serverSock =new ServerSocket(port);  
  166.             } catch (IOException e) {  
  167.                 // TODO Auto-generated catch block  
  168.                 e.printStackTrace();  
  169.             }  
  170.     }  
  171.       
  172.     public static void main(String[] args) {  
  173.         // TODO Auto-generated method stub  
  174.         EdServer ed = new EdServer();  
  175.         ed.ui();  
  176.         {  
  177.             port=Integer.valueOf(portText.getText()).intValue();  
  178.             System.out.println(port);  
  179.             try {  
  180.                 serverSock = new ServerSocket(port);  
  181.             } catch (IOException e1) {  
  182.                 // TODO Auto-generated catch block  
  183.                 e1.printStackTrace();  
  184.             }  
  185.             Runnable runnable = new threadServer();  
  186.             Thread sockThread = new Thread(runnable);  
  187.             sockThread.start();  
  188.         }  
  189.         sentConfirm.addActionListener(new ActionListener()  
  190.         {  
  191.             public void actionPerformed(ActionEvent e)  
  192.             {  
  193.                 try {  
  194.                     PrintWriter writer = new PrintWriter(sock.getOutputStream());  
  195.                     String writerTransfer = transferText.getText();  
  196.                     System.out.println(writerTransfer);  
  197.                     writer.println(writerTransfer);  
  198.                     writer.flush();       
  199.                 } catch (IOException e1) {  
  200.                     // TODO Auto-generated catch block  
  201.                     e1.printStackTrace();  
  202.                 }  
  203.             }  
  204.         });  
  205.   
  206.     }  
  207.   
  208.       
  209.   
  210. }