课外天地 李树青学习天地Java程序语言课件 → 程序代码——GUI界面网络通信程序


  共有20363人关注过本帖树形打印复制链接

主题:程序代码——GUI界面网络通信程序

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1938 积分:26572 威望:0 精华:34 注册:2003/12/30 16:34:32
程序代码——GUI界面网络通信程序  发帖心情 Post By:2006/2/26 22:13:35 [只看该作者]

一个更加漂亮的GUI界面网络通信程序

客户机端:
package test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;

class Client extends JFrame
{
        Container contentPanel = this.getContentPane();
        JButton connectJButton =new JButton("连接服务器");
        JButton closeJButton = new JButton("关闭对话");
        JButton fireJButton = new JButton("发送信息");
        JButton rushJButton = new JButton("刷新显示器");
        JTextField inputJText = new JTextField(15);
        JTextArea displayJText = new JTextArea();
        JScrollPane containPane = new JScrollPane(displayJText);
        JPanel jbuttonJPanel = new JPanel();
        JLabel dialogueJLabel = new JLabel("客 户 端 显 示 器",JLabel.CENTER);
        JLabel stateJLabel = new JLabel("请连接服务器");
    JPanel jlabelJPanel = new JPanel();
    JTextField inputInetJText = new JTextField(15);
    JLabel injtJLabel = new JLabel("服务器名称:");
    JPanel workJPanel = new JPanel();
        Font font = new Font("宋体",Font.BOLD,22);
        //网络对象声明
        Socket clientSocket = null;//客户端套接字
        BufferedReader clientReader = null;//客户端读出流
        PrintWriter clientWriter = null;//客户端写入流
        ClientReaderThread crt =new ClientReaderThread();
        Thread crThread =null;  //客户端读出线程
        public Client()
        {
                jInit();
                this.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                                System.exit(0);
                        }
                });
                this.setTitle("客户通讯器");
                this.setSize(650,250);
                this.setVisible(true);
        }
        private void jInit()
        {
                contentPanel.setLayout(new BorderLayout(10,10));
                contentPanel.add(jlabelJPanel,BorderLayout.NORTH);
                jlabelJPanel.add(dialogueJLabel);
                jlabelJPanel.add(injtJLabel);
                jlabelJPanel.add(inputInetJText);
                dialogueJLabel.setFont(font);
                contentPanel.add(new JLabel("    "),BorderLayout.EAST);
                contentPanel.add(new JLabel("    "),BorderLayout.WEST);
                contentPanel.add(workJPanel,BorderLayout.CENTER);
                contentPanel.add(stateJLabel,BorderLayout.SOUTH);
                workJPanel.setLayout(new BorderLayout());
                workJPanel.add(containPane,BorderLayout.CENTER);
                workJPanel.add(jbuttonJPanel,BorderLayout.SOUTH);
                jbuttonJPanel.add(connectJButton);
                connectJButton.addActionListener(new ConnectJButton_ActionListener());
                jbuttonJPanel.add(closeJButton);
                closeJButton.addActionListener(new CloseJButton_ActionListener());
                jbuttonJPanel.add(fireJButton);
                jbuttonJPanel.add(inputJText);
                jbuttonJPanel.add(rushJButton);
                fireJButton.addActionListener(new FireJButton_ActionListener());
            rushJButton.addActionListener(new RushJButton_ActionListener());
        }
        /**
         *
         *连接服务器,初始所有网络对象。
         *
         */
        private void connectServer()
        {
                try
                {
                        if (clientSocket == null)
                        {
                                clientSocket = new Socket(inputInetJText.getText(),1800);
                            clientReader = new BufferedReader(
                                new InputStreamReader(clientSocket.getInputStream()));
                            clientWriter = new PrintWriter(clientSocket.getOutputStream(),true);
                    Thread crThread = new Thread(crt) ;
                    crt.bCRT = true;
                            crThread.start(); //运行客户端读出线程
                            stateJLabel.setText("服务器成功连接,已经获取客户端读出流,写入流。");
                        }
                        else
                        {
                                stateJLabel.setText("服务器已经连接");
                        }
                }
                catch(UnknownHostException e)
                {
                        closeServer();
                        stateJLabel.setText("不存在此服务器");
                }
                catch(IOException e)
                {
                        closeServer();
                        stateJLabel.setText("网络中断,连接服务器不成功,服务器末打开。");
                }
        }
        /**
         *断开服务器,关闭所有网络对象。
         */
        private void closeServer()
        {
                try
                {
                        if (clientSocket != null)
                        {
                                clientSocket.close();
                            clientSocket= null;
                                if (clientReader != null)
                                {
                                        clientReader.close();
                                        clientReader= null;
                                }
                                if (clientWriter != null)
                                {
                                        clientWriter.close();
                                        clientWriter = null;
                                }
                            stateJLabel.setText("服务器成功断开");
            }
           else
           {
                 stateJLabel.setText("服务器已经断开");
           }
                }
                catch(IOException e)
                {
                        clientReader = null;
                        clientWriter = null;
                        clientSocket = null;
                        stateJLabel.setText("网络中断,服务器已经断开");
                }
        }
        /**
         *向服务器发送消息
         */
        private void fireMessage()
        {
                try
                        {
                                String temp = inputJText.getText();
                                if (temp .equals(""))
                                {
                                        stateJLabel.setText("发送信息不能为空");
                                        return;
                                }
                                else
                                {
                                        if(clientWriter != null)
                                        {
                                                clientWriter.println("客户端说:  " + temp);
                                                displayJText.setText(displayJText.getText() + "客户端说:  "+
                                                                 inputJText.getText() + "\n");
                                            clientWriter.flush();
                                            stateJLabel.setText("消息成功发送");
                                        }
                                        else
                                        {
                                                stateJLabel.setText("还没有连接到服务器");
                                        }
                                }
                        }
                        catch(Exception e)
                        {
                                stateJLabel.setText("网络中断,服务器关闭");
                        }
        }
        
        //客户端读出线程类
        class ClientReaderThread implements Runnable
        {
                public boolean bCRT = true;
                String temp = "";
                public void run()
                {
                        while (bCRT)
                        {
                                try
                                {
                                        try
                                         {
                                           temp = clientReader.readLine();
                                         }
                                                //网络中断,自身关闭。
                                         catch(IOException e)
                                         {
                                                closeServer();
                                            closeJButton.setEnabled(true);
                                            stateJLabel.setText("网络中断,自身关闭,服务器断开。或服务器直接断开。");
                                            bCRT = false;
                                            return;
                                         }
                                        if (temp == null)
                                        {
                                                closeServer();
                                                stateJLabel.setText("网络中断,服务器关闭,自身断开。");
                                                closeJButton.setEnabled(true);
                                                bCRT = false;
                                                return;
                                        }
                                        displayJText.setText(displayJText.getText() + temp + "\n");
                                }
                                catch(Exception e)
                                {
                                }
                        }
                }
        }
/*************控件监视器类*********************************************/        
        class CloseJButton_ActionListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        crt.bCRT = false;//关闭客户端读出线程类
                        closeServer();
                }
        }
        class ConnectJButton_ActionListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                         connectServer();
                }
        }
        class FireJButton_ActionListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        fireMessage();
                }
        }
        class RushJButton_ActionListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        displayJText.setText("");
                        stateJLabel.setText("刷新屏幕。");
                }
        }
        public  static void main(String args[])
        {
                new Client();
        }
}

服务器端:
package test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import com.sun.java.swing.plaf.motif.MotifLookAndFeel;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
import javax.swing.plaf.metal.MetalLookAndFeel;


/*******服务器运行步骤**********
  * 1:建立服务器套接字,运行客户端搜索线程。
  * 2:通过线程同步搜索客户端,然后初始客户端读出流,客户端写入流,运行客户端读出线程。
  * 3:运行客户端读出线程,同时可向客户端发送消息。
  * 4:随时可以关闭服务器。
  *
  *
  **/
class Server extends JFrame
{
        Container contentPanel = this.getContentPane();
        JTextArea displayJText = new JTextArea();
        JScrollPane containPane = new JScrollPane(displayJText);
        JButton openJButton = new JButton("开启服务器");
        JButton closeJButton = new JButton("关闭服务器");
        JButton fireJButton = new JButton("发送");
        JButton rushJButton = new JButton("刷新显示区");
        JTextField inputJText = new JTextField(15);
        JLabel stateJLabel = new JLabel("请开启服务器");
        JPanel jbuttonJPanel = new JPanel();
        JLabel dialogueJLabel=new JLabel("服 务 器 对 话 显 示 区",JLabel.CENTER);
        JPanel workJPanel = new JPanel();
        JButton closeReader = new JButton("关闭读出");
        JRadioButton metalJRadio = new JRadioButton("metal");
        JRadioButton windowJRadio = new JRadioButton("window");
        JRadioButton motifJRadio = new JRadioButton("motif");
        ButtonGroup jradioBGroup = new ButtonGroup();
        JPanel southJPanel= new JPanel();
        JLabel jradioJLabel = new JLabel("请选择不同风格:");
        JPanel jradioJPanel =new JPanel();
        JRadio_ItemLisener jritemListener = new JRadio_ItemLisener();
        Font font = new Font("宋体",Font.BOLD,22);
        //网络对象声明。
        ServerSocket serverSocket = null;//服务器套接字。
        Socket clientSocket = null;//客户端套接字。
        BufferedReader clientReader = null;//客户端读出流。
        PrintWriter clientWriter = null;//客户端写入流。
        FindClientSocket fcs = new FindClientSocket();
        Thread fcsThread = null ;//客户端搜索线程。
        ClientReaderThread crt =new ClientReaderThread();
        Thread crThread = null ;//客户端读出线程。
        public Server()
        {
                jInit();
                this.setTitle("通讯服务器");
                this.setSize(650,250);
                this.setVisible(true);
                this.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                                System.exit(0);
                        }
                });
        }
        /**
         *加载界面控件。
         */
        private void jInit()
        {
                contentPanel.setLayout(new BorderLayout(10,10));
                
                contentPanel.add(dialogueJLabel,BorderLayout.NORTH);
                dialogueJLabel.setFont(font);
                contentPanel.add(new JLabel("    "),BorderLayout.EAST);
                contentPanel.add(new JLabel("    "),BorderLayout.WEST);
                contentPanel.add(workJPanel,BorderLayout.CENTER);
                contentPanel.add(southJPanel,BorderLayout.SOUTH);
                southJPanel.setLayout(new BorderLayout());
                southJPanel.add(jradioJPanel,BorderLayout.CENTER);
                southJPanel.add(stateJLabel,BorderLayout.SOUTH);
                jradioJPanel.add(jradioJLabel);
                jradioJPanel.add(metalJRadio);
                metalJRadio.addItemListener(jritemListener);
                jradioJPanel.add(windowJRadio);
                windowJRadio.addItemListener(jritemListener);
                jradioJPanel.add(motifJRadio);
                motifJRadio.addItemListener(jritemListener);
                
                jradioBGroup.add(metalJRadio);
            jradioBGroup.add(windowJRadio);
            jradioBGroup.add(motifJRadio);
                workJPanel.setLayout(new BorderLayout());
                workJPanel.add(containPane,BorderLayout.CENTER);
                workJPanel.add(jbuttonJPanel,BorderLayout.SOUTH);
                jbuttonJPanel.add(openJButton);
                openJButton.addActionListener(new OpenJButton_ActionListener());
                jbuttonJPanel.add(closeJButton);
                closeJButton.addActionListener(new CloseJButton_ActionListener());
                jbuttonJPanel.add(fireJButton);
                fireJButton.addActionListener(new FireJButton_ActionListener());
                jbuttonJPanel.add(inputJText);
                jbuttonJPanel.add(rushJButton);
                rushJButton.addActionListener(new RushJButton_ActionListener());
        }
        /**
         *开启服务器,初始所有网络对象。
         *
         */
        private void openServer()
        {
                        if (serverSocket == null)
                        {
                                try
                        {
                                   serverSocket = new ServerSocket(1800);//初始服务器套接字。
                               fcsThread =new Thread(fcs); //运行客户端搜索线,初始客户端套接字。
                               fcsThread.start();
                                }
                                catch(IOException e)
                        {
                                closeServer();
                                stateJLabel.setText("网络中断,服务器失败开启.");
                        }
                     }
                        else if (serverSocket != null & clientSocket != null)
                        {
                                stateJLabel.setText("服务器已经开启");
                        }
        }
        /**
         *
         *关闭服务器套接字,客户端套接字,客户端读出流,客户端写入流.
         */
        private void closeServer()
        {
                if (serverSocket != null)
                {
                   try
                   {
                            serverSocket.close();
                            serverSocket = null;
                            if (clientSocket != null)
                                {
                                        clientSocket.close();
                                        clientSocket=null;
                                }
                                if (clientReader != null)
                                {
                                        clientReader.close();
                                        clientReader = null;
                                }
                                if (clientWriter != null)
                                {  
                                        clientWriter.close();
                                        clientWriter = null;
                                }
                            stateJLabel.setText("服务器成功关闭");
                    }
                    catch(IOException e)
                    {
                           clientReader = null;
                           clientWriter = null;
                           clientSocket = null;
                           serverSocket = null;
                           stateJLabel.setText("网络中断,服务器关闭.");
                    }
                    catch(Exception e)
                    {
                        stateJLabel.setText("有问题。 ");
                    }
                  }
                  else
                  {
                        stateJLabel.setText("服务器已经关闭");
                  }
        }
        /**
         *向客户端发送消息
         */
        private void fireMessage()
        {
                try
                        {
                                String temp = inputJText.getText();
                                if (temp.equals(""))
                                {
                                        stateJLabel.setText("发送信息不能为空");
                                        return;
                                }
                                else
                                {
                                        if(clientWriter != null)
                                        {
                                                clientWriter.println("服务器说:  " + temp);
                                                displayJText.setText(displayJText.getText() + "服务器说:  "+
                                                              inputJText.getText()+"\n");
                                            clientWriter.flush();
                                            stateJLabel.setText("消息成功发送");
                                        }
                                        else
                                        {
                                                stateJLabel.setText("还没有搜索到客户端");
                                        }
                                }
                        }
                        catch(Exception e)
                        {
                                
                        }
        }
        //客户端搜索线程类。
        class FindClientSocket implements Runnable
        {
                public void run()
                {
                                try
                                {
                                        stateJLabel.setText("正在搜索客户端");
                                        clientSocket = serverSocket.accept();
                                        //搜索成功后,立即初始化客户端读出流,客户端写入流。
                                    clientReader = new BufferedReader(
                                     new InputStreamReader(clientSocket.getInputStream()));
                                    clientWriter = new PrintWriter(clientSocket.getOutputStream(),true);
                        Thread crThread = new Thread(crt) ;
                                crt.bCRT= true;
                                crThread.start(); //运行客户端读出线程
                                stateJLabel.setText("服务器成功开启,已经成功搜索到客户端");
                                }
                                catch(IOException  e)
                                {
                                        //网络中断,搜索客户端不成功,关闭所有网络对象。
                                        closeServer();
                                        stateJLabel.setText("网络中断,服务器关闭,搜索客户端失败");
                            }
                }
        }
        //客户端读出线程类。
        class ClientReaderThread implements Runnable
        {
                public boolean bCRT = true;
                String temp = "";
                public void run()
                {
                        while (bCRT)
                        {
                                try
                                {      
                                           try
                                           {
                                                temp = clientReader.readLine();//从客户端读出信息。
                                           }
                                           catch(IOException e)//如果自身关闭,则停止线程。
                                       {
                                        closeServer();
                                            stateJLabel.setText("网络中断,自身关闭,客户端断开。或客户端直接断开。");
                                            return;
                                       }
                                       //当客户端关闭客户端套接字时,关闭所有网络对象。
                                       if (temp == null)//如果客户端关闭,则停止线程。
                                       {
                                        closeServer();
                                        stateJLabel.setText("网络中断,客户端关闭,自身断开。");
                                        return;
                                       }
                                       //显示信息。
                                           displayJText.setText(displayJText.getText() + temp + "\n");
                                }
                                catch(Exception e)
                                {
                                }
                        }
                }
        }

/*************控件监视器类*********************************************/
        
        class OpenJButton_ActionListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        openServer();
                }
        }
        class CloseJButton_ActionListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        crt.bCRT = false;
                        closeServer();
                }
        }
        class FireJButton_ActionListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        fireMessage();
                }
        }
        class RushJButton_ActionListener implements ActionListener
        {
                public void actionPerformed(ActionEvent e)
                {
                        displayJText.setText("");
                        stateJLabel.setText("刷新屏幕。");
                }
        }
        class JRadio_ItemLisener implements ItemListener
        {
                public void itemStateChanged(ItemEvent e)
                {
                        Object  jr = e.getItem();
                  try
                  {
                        if (jr.equals(metalJRadio) & e.getStateChange()==e.SELECTED )
                        {
                                UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                        }
                        else if(jr.equals(motifJRadio) & e.getStateChange()==e.SELECTED)
                        {
                                UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
                        }
                        else if (jr.equals(windowJRadio) & e.getStateChange()==e.SELECTED)
                        {
                                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                        }
                  }
                  catch(Exception ex)
                  {
                  }
                  SwingUtilities.updateComponentTreeUI(getContentPane());
                  
                }
        }
        public  static void main(String args[])
        {
                new Server();
        }
}

[此贴子已经被作者于2010-12-12 08:05:00编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zpcandzhj
  2楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:277 威望:0 精华:0 注册:2009/11/3 17:36:36
  发帖心情 Post By:2013/6/6 0:28:34 [只看该作者]

import com.sun.java.swing.plaf.motif.MotifLookAndFeel;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
老师,我的Myeclipse中这两句报错。
“访问限制:由于对必需的库 D:\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\rt.jar 具有一定限制,因此无法访问类型 WindowsLookAndFeel”

 回到顶部
帅哥哟,离线,有人找我吗?
zpcandzhj
  3楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:277 威望:0 精华:0 注册:2009/11/3 17:36:36
  发帖心情 Post By:2013/6/6 15:50:47 [只看该作者]

请问是不是缺少jar包,哪里可以下?

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  4楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1938 积分:26572 威望:0 精华:34 注册:2003/12/30 16:34:32
  发帖心情 Post By:2013/7/16 2:56:07 [只看该作者]

无需额外的包,你仔细检查下配置

 回到顶部