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

📄 myclient.java

📁 个人聊天工具的web服务器源代码
💻 JAVA
字号:

import java.io.*;

import javax.swing.*;

import java.awt.*;
import java.net.*;
import java.util.*;
import java.awt.event.*;
public class MyClient extends JFrame{
   JTextArea Msgjta,MsgLogjta;
   JScrollPane Msgjsp,MsgLogjsp,UserListjsp;
   JButton send,cancel,Setname,FileSend;
   JLabel Msglab,MsgLoglab,UserListlab,Targetlab;
   JPanel panel1,panel2,panel3;
   java.awt.List UserList;
   JRadioButton Unicast,P2P;
   JPanel panel21,panel22,panel23,panel23button;
   JTextField Namejtf;
   JFileChooser jfilechooser;
   String File_send = "";
   String File_save = "";

   BufferedReader in;
   PrintWriter outMessage;
   Socket socket;
   String inMessage = "";
   String Username = "";
   String Oldname = "";
   String OtherUser = "";
   String Myname= "";
   MyClient(){
	  jfilechooser = new JFileChooser(new File("."));
      panel1 = new JPanel();
      panel2 = new JPanel();
      panel3 = new JPanel();
      
	  setLayout(new BorderLayout(10,10));
      getContentPane().add(panel1,BorderLayout.WEST);
      getContentPane().add(panel2,BorderLayout.CENTER);
      getContentPane().add(panel3,BorderLayout.SOUTH);

	  panel1.setLayout(new BorderLayout(10,10));
	  UserListlab = new JLabel("Client List");
	  UserList = new java.awt.List(10,false);
	  UserListjsp = new JScrollPane(UserList,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
      panel1.add(UserListlab,BorderLayout.NORTH);
	  panel1.add(UserListjsp,BorderLayout.CENTER);

	  panel21 = new JPanel();
	  panel21.setLayout(new BorderLayout(10,10));
	  Targetlab = new JLabel("Input your Name under(only one time):");
	  Namejtf = new JTextField();
	  panel21.add(Targetlab,BorderLayout.NORTH);
	  panel21.add(Namejtf,BorderLayout.CENTER);

      panel22 = new JPanel();
	  panel22.setLayout(new FlowLayout(FlowLayout.LEFT,5,10));
	  Msglab = new JLabel("Message");
	  Unicast = new JRadioButton("Unicast");
      Unicast.setSelected(true);
	  P2P = new JRadioButton("P2P");
	  ButtonGroup group = new ButtonGroup();
	  group.add(Unicast);
	  group.add(P2P);
	  Setname = new JButton("Setname");
	  FileSend = new JButton("FileSend");
      panel22.add(Msglab);
	  panel22.add(Unicast);
	  panel22.add(P2P);
	  panel22.add(Setname);
	  panel22.add(FileSend);
	

	  panel23button = new JPanel();
      panel23button.setLayout(new FlowLayout(FlowLayout.CENTER,5,10));
	  send = new JButton("send");
	  cancel = new JButton("cancel");
	  panel23button.add(send);
	  panel23button.add(cancel);

	  panel23 = new JPanel();
	  panel23.setLayout(new BorderLayout(10,10));
	  Msgjta = new JTextArea(5,60);
      Msgjsp = new JScrollPane(Msgjta,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
	  panel23.add(panel22,BorderLayout.NORTH);
	  panel23.add(Msgjsp,BorderLayout.CENTER);
	  panel23.add(panel23button,BorderLayout.SOUTH);
     
	  panel2.setLayout(new BorderLayout(10,10));
	  panel2.add(panel21,BorderLayout.NORTH);
	  panel2.add(panel23,BorderLayout.CENTER);

	  panel3.setLayout(new BorderLayout());
      MsgLogjta = new JTextArea(10,60);
      MsgLogjta.setEditable(false);
      MsgLoglab = new JLabel("Message Log");
      MsgLogjsp = new JScrollPane(MsgLogjta,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
      panel3.add(MsgLoglab,BorderLayout.NORTH);
      panel3.add(MsgLogjsp,BorderLayout.CENTER);
	
	  setTitle("Client");
      pack();
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setVisible(true);

	  ButtonListener sendMessage = new ButtonListener();
	  send.addActionListener(sendMessage);

	  Name_ButtonListener setname = new Name_ButtonListener();
	  Setname.addActionListener(setname);
	  
	  Filesend_ButtonListener filesend = new Filesend_ButtonListener();
	  FileSend.addActionListener(filesend);
	  
      try{
		  socket = new Socket("127.0.0.1",8000);
		  in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
          outMessage = new PrintWriter(socket.getOutputStream());
     
		  while(true){
		     inMessage = in.readLine().trim();
			 if(inMessage.indexOf("系统提示:") != -1 && inMessage.indexOf("在线") != -1){
				OtherUser = inMessage.substring(5,inMessage.indexOf("在"));
                UserList.add(OtherUser);
			 }
			 else if(inMessage.indexOf("系统提示:") != -1 && inMessage.indexOf("来了") != -1){
	            Oldname = inMessage.substring(5,inMessage.indexOf("来"));
                UserList.add(Oldname);
             }
             else if(inMessage.indexOf("系统提示:") != -1 && inMessage.indexOf("下线了") != -1){
				OtherUser = inMessage.substring(5,inMessage.indexOf("下"));
				UserList.remove(OtherUser);
			 }
			 else if(inMessage.indexOf("系统提示:") != -1 && inMessage.indexOf("改名为") != -1){
				Oldname = inMessage.substring(5,inMessage.indexOf("改"));
				Username = inMessage.substring(9+Oldname.length(),inMessage.length()-1);
				UserList.remove(Oldname);
				UserList.add(Username);
				Oldname = Username;
             }
			 else if(inMessage.indexOf("系统提示:") != -1 && inMessage.indexOf("发文件") != -1){
			    File_save = inMessage.substring(inMessage.indexOf("件")-1,inMessage.length()-inMessage.indexOf("件"));
			    
			 }
			 else if(inMessage.indexOf("系统提示:") != -1 && inMessage.indexOf("拒绝接受") != -1){
				 MsgLogjta.append(new Date()+ inMessage);
			 }
			 if(inMessage.indexOf("系统提示:") != -1 && inMessage.indexOf("发文件") != -1){
	   		     MsgLogjta.append(new Date()+ " " + "系统提示:" + inMessage.indexOf(5,inMessage.indexOf("对"))+"对你发送文件,请接收!"+ "\n");
	   			 SaveFile();
	   	     }
			 else
				 MsgLogjta.append(new Date()+ " " + inMessage + "\n");
		  }
      }catch(IOException ex){
          System.out.println("^^^"+ex);
	  }
   }
	//信息发送
    class ButtonListener implements ActionListener{
		String who = "";
		public void actionPerformed(ActionEvent e){
		    if(Unicast.isSelected()){
				boolean is_public = true;
				for(int i=0;i<UserList.getRows();i++){
			       if(UserList.isIndexSelected(i)){
					   if(!UserList.getItem(i).toString().equals(Oldname)){
                           who = Namejtf.getText().trim() + "对"+UserList.getSelectedItem()+"公开的说";
					       is_public = false;
					   }
					   else{
                           MsgLogjta.append("你不能跟自己发信息!!! " + "\n");
						   is_public = false;
						   Msgjta.setText("");
					   }
				   }
			    }
				if(is_public)
                    who = Namejtf.getText().trim() + "对大家说:";
			}
			else if(P2P.isSelected() && !UserList.getSelectedItem().toString().equals(Oldname)){
			     who = Namejtf.getText().trim() + "对"+UserList.getSelectedItem()+"悄悄的说";
			}
			else if(P2P.isSelected() && UserList.getSelectedItem().toString().equals(Oldname)){
                 who = "";
			     MsgLogjta.append("你不能跟自己发信息!!! " + "\n");
                 Msgjta.setText("");
			}
			String temp = who + Msgjta.getText().trim();
			if(!temp.equals(null)){
               outMessage.println(temp);
		       outMessage.flush();
			   Msgjta.setText("");
		    }
			
		}
   }

   class Name_ButtonListener implements ActionListener{
       public void actionPerformed(ActionEvent e){
		   Username = Namejtf.getText().trim();
		   if(!Username.equals(Oldname)){
	          outMessage.println("#"+Username+"#");
		      outMessage.flush();
		   }
		   Setname.setVisible(false);
		   Namejtf.setEditable(false);
	    }
    }
    
    private void OpenFile(){
    	if(jfilechooser.showOpenDialog(this)== JFileChooser.APPROVE_OPTION)
    		OpenFile(jfilechooser.getSelectedFile());
    }
    
    private void OpenFile(File file){
    	try{
    		BufferedInputStream inn = new BufferedInputStream(new FileInputStream(file));
    		byte b[] = new byte[inn.available()]; 
    		inn.read(b,0,b.length);
    		File_send = new String(b,0,b.length);
    		inn.close();
    	}catch(IOException ex){
    		
    	}
    }
    
    class Filesend_ButtonListener implements ActionListener{
    	String file_who = "";
    	public void actionPerformed(ActionEvent e){
    		if(Unicast.isSelected()){
    		   MsgLogjta.append("系统提示:"+"你不能向大家发送文件,请选择P2P和你要发送文件的用户"+"\n");	
    		}
    		else{
    		    OpenFile();
    		    if(P2P.isSelected()){
    			    if(UserList.getSelectedItem().toString().equals(Oldname)){
                        file_who = "";
  			            MsgLogjta.append("系统提示:"+"你不能跟自己发文件!!! " + "\n");
                    }
    			    else
			            file_who = Namejtf.getText().trim() + "对"+UserList.getSelectedItem()+"发文件";
			    }
    	        if(!file_who.equals(null)){
    	            System.out.println("&&"+file_who+File_send);
                    outMessage.println(file_who+File_send);
 		            outMessage.flush();
 		        }
    	    }
    	}
    }
    
    private void SaveFile(){
    	if(jfilechooser.showSaveDialog(this)==JFileChooser.APPROVE_OPTION)
    		SaveFile(jfilechooser.getSelectedFile());
    	else{
    		outMessage.println(Namejtf.getText()+"拒绝接收"+inMessage.substring(5, inMessage.indexOf("对"))+"发送的文件");
    		outMessage.flush();
    	}
    }
    
    private void SaveFile(File file){
    	try{
    	    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
         	byte[] b = (File_save).getBytes();
        	out.write(b,0,b.length);
        	out.close();
    	}catch(IOException ex){
    		
    	}
    }
    
    class Cancel_ButtonListener implements ActionListener{
    	public void actionPerformed(ActionEvent e){
    		MsgLogjta.setText("");
    	}
    }
    
    public static void main(String args[]){
       new MyClient();
    }
}

⌨️ 快捷键说明

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