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

📄 mainframe.java

📁 类似qq的以c/s结构和p2p结构结合的聊天软件。
💻 JAVA
字号:
package com.client;
import java.awt.List;
import java.awt.Font;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.ServerSocket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JScrollPane;

class MainFrame extends JFrame implements Runnable
{
	public  static List list;
    public  static String clientName;
    private  static String destName;
	private static Socket clientSocket;
    private static ObjectOutputStream out ;
	private static ObjectInputStream in;
    private static String flag;
    private static String destIP;
    private static String[] chatMessage;
    public static String[] serverMessage;
    public static String serverIP;
    public static int port;
	public MainFrame(String[] serverMessage,String clientName,String sIP) 
	{
		super();
		this.serverIP=sIP;
		setIconImage(new ImageIcon(this.getClass().getResource("image/bird.jpg")).getImage());
		port=9000;
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		this.clientName=clientName;
		this.serverMessage=serverMessage;

        setTitle(clientName);
		getContentPane().setLayout(null);
		setBounds(100, 100, 194, 416);

		list = new List();
		list.addMouseListener(new MouseAdapter() 
		{
			public void mouseClicked(MouseEvent e) 
			{
			  int clickCount=e.getClickCount();   
		      if(clickCount==2) 
		      {
			      destName=list.getSelectedItem();
			      chatMessage=new String[2];
			      chatMessage[0]="chat";
			      chatMessage[1]=destName;
			     try
			     {
			         Socket sk=new Socket(serverIP,7777);
			         out=new ObjectOutputStream(sk.getOutputStream());
					 in=new ObjectInputStream(sk.getInputStream());
					 out.writeObject(chatMessage);
					 out.flush();
					 destIP=(String)in.readObject();
					 if(destIP.equals("failed"))
					 {
						 MessageDialog dialog=new MessageDialog("没有此用户!");
		    	         dialog.setSize(331, 163);
		    	         return;
					 }
					 else if(destIP.equals("unlogin"))
					 {
						   MessageDialog dialog=new MessageDialog("此用户未登录!");
			   	            dialog.setSize(331, 163);
			   	            return;
					 }
					 else
					 {
						 Socket requestSocket=new Socket(destIP,8890);
						 ObjectOutputStream os=new ObjectOutputStream(requestSocket.getOutputStream());
						 ObjectInputStream is=new ObjectInputStream(requestSocket.getInputStream());
						 os.writeObject("chat");
						 os.flush();
						 int ack=(Integer)is.readObject();
						 if(ack==1)
						 {

							 MessageDialog dialog=new MessageDialog("对方拒绝连接!");
				   	         dialog.setSize(331, 163);
				   	         return;
						 }
						 else
						 {
				   	         flag="client";
				   	         port=ack;
							 ChatThread chat=new ChatThread(flag,destIP,destName,port);
							 Thread thread=new Thread(chat);
							 chat.setVisible(true);
							 thread.start();
						 }
					 }
			     }catch(Exception ce){}
		      }
			}
		});
		list.setBounds(10, 29, 166, 293);
		Font font=new Font("楷体",Font.BOLD,16);
		list.setFont(font);
		for(int i=1;i<serverMessage.length;i++)
		{
			String[] tempStr=new String[2];
			tempStr=serverMessage[i].split("!");
			list.add(tempStr[0]);
		}
		final JScrollPane scrollPane= new JScrollPane();
		scrollPane.setBounds(10, 42, 166, 277);
		getContentPane().add(scrollPane);

		scrollPane.setViewportView(list);
		

		final JLabel label = new JLabel();
		label.setText("好友列表");
		label.setBounds(70, 0, 63, 21);
		getContentPane().add(label);

		final JButton close = new JButton();
		close.addActionListener(new ActionListener() 
		{
			public void actionPerformed(ActionEvent arg0) 
			{
				try
				{
					Socket sk=new Socket(serverIP,7777);
					out=new ObjectOutputStream(sk.getOutputStream());
					in=new ObjectInputStream(sk.getInputStream());
					String[] withdrawMessage=new String[2];
					withdrawMessage[0]="withdraw";
					withdrawMessage[1]=MainFrame.clientName;
					out.writeObject(withdrawMessage);
					out.flush();
					System.exit(0);
				}catch(Exception oe){}
			}
		});
		close.setText("退出");
		close.setBounds(102, 354, 63, 23);
		getContentPane().add(close);

		final JButton button = new JButton();
		button.addActionListener(new ActionListener() 
		{
			public void actionPerformed(ActionEvent arg0) 
			{
			    EditionMessage edition=new EditionMessage();
			    edition.setVisible(true);
			}
		});
		button.setText("关于");
		button.setBounds(23, 354, 63, 23);
		getContentPane().add(button);

		final JLabel lookup = new JLabel();
		lookup.setIcon(new ImageIcon(this.getClass().getResource("image/lookup.jpg")));
		lookup.addMouseListener(new MouseAdapter() 
		{
			public void mouseClicked(MouseEvent arg0)
			{
				try {
					Lookup dialog = new Lookup();
					dialog.addWindowListener(new WindowAdapter() 
					{
						public void windowClosing(WindowEvent e) 
						{
							dispose();
						}
					});
					dialog.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		lookup.setBounds(37, 325, 37, 22);
		getContentPane().add(lookup);

		final JLabel delete = new JLabel();
		delete.addMouseListener(new MouseAdapter() 
		{
			public void mouseClicked(MouseEvent arg0) 
			{
				try
				{
					Socket sk=new Socket(serverIP,7777);
					out=new ObjectOutputStream(sk.getOutputStream());
					in=new ObjectInputStream(sk.getInputStream());
					String[] withdrawMessage=new String[2];
					String[] deleteMessage=new String[3];
					deleteMessage[0]="delete";
					deleteMessage[1]=MainFrame.clientName;
					deleteMessage[2]=list.getSelectedItem().toString();
					out.writeObject(deleteMessage);
					out.flush();
					list.remove(deleteMessage[2]);
					list.repaint();
					MessageDialog dialog=new MessageDialog("已经将"+deleteMessage[2]+"从好友中删除。");
	   	            dialog.setSize(331, 163);
	   	            return;
				}catch(Exception pe){}
			}
		});
		delete.setIcon(new ImageIcon(this.getClass().getResource("image/del.jpg")));
		delete.setBounds(124, 325, 37, 23);
		getContentPane().add(delete);
		setVisible(true);
	
	}
	public void run()
	{
		 try
	       {  
	          ServerSocket serverSocket=new ServerSocket(8890);
	          while(true)
	        	 {
	        		  Socket  cSocket=serverSocket.accept();
	        		  ObjectOutputStream os=new ObjectOutputStream(cSocket.getOutputStream());
	        		  ObjectInputStream is=new ObjectInputStream(cSocket.getInputStream());
	        		  String request=(String)is.readObject();
	        		   port++;
	 				   os.writeObject(port);
	 				   os.flush();
	        		  if(request.equals("chat"))
	        		  {
	        			
	        			  flag="server";
		        		  String destIP=cSocket.getInetAddress().toString();
		        		  ChatThread chat=new ChatThread(flag,destIP,"",port);
		        		  chat.setVisible(true);
					      Thread thread=new Thread(chat);
						  thread.start();
	        		  }
	        		  else if(request.equals("file"))
	        		  {
	        			  
	        			    port=port+1;
		        		    os.writeObject(port);
		        		    os.flush();
		        		    try
		        			{
		        				ServerSocket fileServerSocket=new ServerSocket(port);
		        				Socket fileSocket=fileServerSocket.accept();
		        				System.out.println("jie dao");
		        				FileRecive fileRcv=new FileRecive(fileSocket);
				  	        	fileRcv.setVisible(true);
				  	        	Thread thread=new Thread(fileRcv);
				  	            thread.start();
		        			}catch(Exception de){}
	        		  }
	        	}
	        }catch(Exception e){ e.printStackTrace();}
	}
}

⌨️ 快捷键说明

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