⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpleclient.java

📁 JAVA编的简单的Socket程序
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.StringTokenizer;

public class simpleclient extends JFrame  implements ActionListener {
	
	 JTextArea ta = new JTextArea(12,28);
    JTextField tf1 = new JTextField(10);
    JTextField tf2 = new JTextField(29);
    JButton b1 = new JButton("登录");
    JButton b2 = new JButton("退出");
    JButton b3 = new JButton("发送");
    JLabel lab1 = new JLabel("用户名:");
    JLabel lab2 = new JLabel("信息: ");
    List list = new List(10);
    JRadioButton rb1 = new JRadioButton("广播发送",true);
    JRadioButton rb2 = new JRadioButton("选择发送");
    ButtonGroup bg = new ButtonGroup();
    JScrollPane sp = new JScrollPane();
    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();
    JPanel p3 = new JPanel();
    JPanel p4 = new JPanel();

	//增加几个数据成员,为socket连接准备。
    Socket socket;
    PrintStream ps;
    String name;
    String ip;
    
	 public simpleclient()
    {
        super("聊天的客户机");
        
          
          
           p1.add(lab1);
        p1.add(tf1);
        p1.add(b1);
        p1.add(b2);
        p2.add(lab2);
        p2.add(tf2);
        p2.add(b3);
        p3.setLayout(new BorderLayout());
        p3.add(list,BorderLayout.NORTH);
        p3.add(rb1,BorderLayout.CENTER);
        p3.add(rb2,BorderLayout.SOUTH);
        bg.add(rb1);
        bg.add(rb2);
        sp.getViewport().add(ta);
        p4.add(p3);
        p4.add(sp);
        getContentPane().add(p1,BorderLayout.NORTH);
        getContentPane().add(p4,BorderLayout.CENTER);
        getContentPane().add(p2,BorderLayout.SOUTH);
        pack();
        //设置聊天室界面居中显示
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = this.getSize();
        if(frameSize.width > screenSize.width)
        {
            frameSize.width = screenSize.width;
        }
        if(frameSize.height > screenSize.height)
        {
            frameSize.height = screenSize.height;
        }
        setLocation((screenSize.width - frameSize.width)/2,
                    (screenSize.height - frameSize.height)/2); 
          
          
          //注册处理对象
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this); 
                  
        setSize(460,430);
        setVisible(true);
        setResizable(false);
        
   
            }     
    ///增加一个主方法    
 public static void main(String[] args)
    {
        simpleclient appclient = new simpleclient();
    }	

//实现抽象函数 
       public void actionPerformed(ActionEvent e)
            {
            	
            	//首先处理登录,即连接服务器
            	 if(e.getActionCommand().equals("登录"))
            {
            	try
                {
                    socket = new Socket(InetAddress.getLocalHost(),7000);
                    if(socket != null)
                    {
                        StringBuffer msg = new StringBuffer("CONNECT:");
                        name = tf1.getText();
                        ip = InetAddress.getLocalHost().toString();
                        msg.append(name+":"+ip);
                        ps = new PrintStream(socket.getOutputStream());
                        ps.println(msg);  //这一句是连接成功后,我们发一个消息给服务器告诉服务器我是谁
                        ps.flush(); 
                        ta.setText("");
                        ta.append(name+"登录成功!"+"\n");
                        b1.setEnabled(false);
                        b2.setEnabled(true);
                        //启动客户端线程 听服务器端传来的信息
                     Thread t = new ClientListener(socket);
                     t.start();
                    }
                }
                catch(IOException ex)
                {
                    ta.append("Error: "+ex+"\n");
                }
            	
            	
            	}
           if(e.getActionCommand().equals("退出"))
            {
                ps.println("QUIT:" + name);
                ps.flush();
            }
            else if(e.getActionCommand().equals("发送"))
            {
                StringBuffer msg = new StringBuffer("MSG:");
                String info = name+":"+tf2.getText();

                if(rb1.isSelected())
                {
                    msg.append("BROAD:"+info);
                }
                else
                {
                    msg.append( list.getSelectedItem()+":"+info);
                }
                ps.println(msg);
                ps.flush();
                tf2.setText("");
            }
   		
            
            
      }
            		
            		
         /////////   		///////////////
         
    ///对每一个连接到服务器的socket开启一个线程     
         
           class ClientListener extends Thread
    {
        Socket socket;
        BufferedReader br;
        PrintStream ps;
        String message;

        public ClientListener(Socket s)
        {
            try
            {
                socket = s;
                br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                ps = new PrintStream(socket.getOutputStream());
            }
            catch(IOException ex)
            {
                ta.append("Error: "+ex+"\n");
            }
        }

        public void run()
        {
            while(true)
            {
                try
                {
                    message = br.readLine();
                    if(message == null)
                        break;
                }
                catch(IOException ex)
                {
                    ta.append("Error-debug: "+ex+"\n");
                }
                StringTokenizer st = new StringTokenizer(message,":");
                String keyword = st.nextToken();

                //服务器端传来各种信息的处理
                if(keyword.equals("PEOPLE"))
                {
                    list.removeAll();
                    while(st.hasMoreTokens())
                    {
                        String user = st.nextToken();
                        list.add(user);
                    }
                }
                else if(keyword.equals("MSG"))
                {
                    String broadcast = st.nextToken();
                    String user = st.nextToken();
                    StringBuffer sb = new StringBuffer(user+st.nextToken("\0"));
                    ta.append(sb+"\n");
                }
                else if(keyword.equals("QUIT"))
                {
                    String who = st.nextToken();
                    if(who.equals("Server"))
                    {
                        closeSocket();
                        ta.append("聊天服务器已经关闭!" + "\n");
                        list.removeAll();
                        b2.setEnabled(false);
                    }
                    else
                    {
                        closeSocket();
                        b1.setEnabled(true);
                        b2.setEnabled(false);
                        list.removeAll();
                        ta.append(name + "退出了聊天室!" + "\n");
                    }
                    break;
                }
            }
        }
    }
   
   ////////
   public void closeSocket()
    {
        if(socket != null)
        {
            try
            {
                socket.close();
            }
            catch (IOException ex)
            {
                ta.append("Error: " + ex + "\n");
            }
        }
    }        
        
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -