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

📄 tnt.java

📁 java开发的桌面应用程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.RandomAccessFile;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.StringTokenizer;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;

public class Tnt implements ActionListener {

	MulticastSocket chat = null;

	byte[] b = new byte[1024];

	int width = 550;

	int height = 450;

	int heightComp = 20;

	int heightborder = 5;

	JTextArea areaSendMsg;

	JTextArea areaDisplayMsg;

	Calendar currentTime = Calendar.getInstance();

	SimpleDateFormat timeFormat = new SimpleDateFormat();

	String friendsName;

	String friendsIp;

	JLabel myName;

	JList friends = new JList();

	DefaultListModel model = new DefaultListModel();

	// right panel
	JPanel panelRightBlock = new JPanel();

	JFrame frame = new JFrame("Tnt-free talk");

	//
	String chatName = "Myname.ini";

	String recordsPath = "records.ini";

	int remotePort;

	int fileSendPort;

	Tnt() {
		try {
			chat = new MulticastSocket(5000);
			chat.joinGroup(InetAddress.getByName("224.0.1.200"));
		} catch (Exception ex) {
			ex.getMessage();
		}
		new Thread(new Runnable() {
			public void run() {
				receive();
			}
		}).start();

	}

	public void actionPerformed(ActionEvent e) {
		send(3);
	}

	public void receive() {
		DatagramPacket dp = new DatagramPacket(b, b.length);
		String[] nameAndIp = new String[2];

		try {
			while (true) {
				chat.receive(dp);
				if (dp.getLength() > 0) {
					String msg = new String(b, 0, dp.getLength());
					// judge the msg is common message or broadcast message
					/*
					 * int 1 ==byte 49 int 0 ==byte 48
					 */
					if (b[0] == 48 || b[0] == 49 || b[0] == 50) {
						StringTokenizer stk = new StringTokenizer(msg, "|");
						int i = 0;
						while (stk.hasMoreElements()) {
							nameAndIp[i++] = stk.nextElement().toString();
						}

						if (b[0] == 48) {
							friendsName = nameAndIp[1];
							friendsIp = dp.getAddress().getHostAddress();
							// remove friends
							reflushFriends("0");
						} else if (b[0] == 49) {
							// judge the message is mine or not
							if (InetAddress.getLocalHost().getHostAddress()
									.equals(dp.getAddress().getHostAddress())) {
							} else {
								friendsName = nameAndIp[1];
								friendsIp = dp.getAddress().getHostAddress();
								// response friends
								send(2);
								// add friends
								reflushFriends("1");
							}
						} else if (b[0] == 50) {
							// judge the message is mine or not
							if (InetAddress.getLocalHost().getHostAddress()
									.equals(dp.getAddress().getHostAddress())) {

							} else {
								friendsName = nameAndIp[1];
								friendsIp = dp.getAddress().getHostAddress();
								// add friends
								reflushFriends("1");
							}
						}
					} else {
						// judge the message is mine or not

						/**
						 * if(InetAddress.getLocalHost().
						 * getHostAddress().equals(dp.getAddress().getHostAddress())){
						 * }else{
						 * 
						 * }
						 */
						// delete "3|"
						msg = msg.substring(2);
						friendsName = msg.substring(0, msg.indexOf("|"));
						areaDisplayMsg.append("OS :"
								+ System.getProperty("os.name") + "      "
								+ "time :"
								+ timeFormat.format(currentTime.getTime())
								+ "      " + "from :" + friendsName
								+ System.getProperty("line.separator")
								+ msg.substring(msg.indexOf("|") + 1)
								+ System.getProperty("line.separator"));
						// selectall can move the cursor to the end
						areaDisplayMsg.selectAll();
					}
				}
			}
		} catch (Exception e) {
			e.getMessage();
		}
	}

	public void send(int flg) {
		DatagramPacket dp = null;
		// BufferedReader br = new BufferedReader(new
		// InputStreamReader(System.in));
		try {
			// flg=2 ,responds friends,tell him my ip
			if (flg == 2) {
				b = (flg + "|" + myName.getText()).getBytes();
				dp = new DatagramPacket(b, b.length, InetAddress
						.getByName(friendsIp), 5000);
				chat.send(dp);
			} else {
				// judge if selected or not
				if (friends.getSelectedIndex() == -1) {

				} else {
					// 嬻偠傖側偄偺帪
					if (!"".equals(areaSendMsg.getText())) {
						int[] index = friends.getSelectedIndices();
						for (int i = 0; i < index.length; i++) {
							NameIpBean nib = (NameIpBean) model
									.getElementAt(index[i]);
							friendsIp = nib.getIp();
							friendsName = nib.getName();
							b = (flg + "|" + friendsName + "|" + areaSendMsg
									.getText()).getBytes();
							dp = new DatagramPacket(b, b.length, InetAddress
									.getByName(friendsIp), 5000);
							// send message to display
							areaDisplayMsg.append("OS :"
									+ System.getProperty("os.name") + "      "
									+ "time :"
									+ timeFormat.format(currentTime.getTime())
									+ "      " + "from :" + friendsName
									+ System.getProperty("line.separator")
									+ areaSendMsg.getText()
									+ System.getProperty("line.separator"));
							// clear send message area
							areaSendMsg.setText("");
							chat.send(dp);
						}
					}
				}
			}
		} catch (Exception e) {
			e.getMessage();
		}
	}

	/*
	 * send broadcast message 0--leaving 1--coming 2--send message to all of
	 * your friends
	 */
	public void sendBroadcastMsg(int flg) {
		DatagramPacket dp = null;

		try {
			if (flg != 3) {
				b = (flg + "|" + myName.getText()).getBytes();
				dp = new DatagramPacket(b, b.length, InetAddress
						.getByName("224.0.1.200"), 5000);
				chat.send(dp);
			} else if (flg == 3&&!"".equals(areaSendMsg.getText())) {
				b = (flg + "|" + myName.getText() + "|" + areaSendMsg.getText())
						.getBytes();
				dp = new DatagramPacket(b, b.length, InetAddress
						.getByName("224.0.1.200"), 5000);
				// send message to display
				areaDisplayMsg.append("OS :" + System.getProperty("os.name")
						+ "      " + "time :"
						+ timeFormat.format(currentTime.getTime()) + "      "
						+ "from :" + myName.getText()
						+ System.getProperty("line.separator")
						+ areaSendMsg.getText()
						+ System.getProperty("line.separator"));
				// clear send message area
				areaSendMsg.setText("");
				chat.send(dp);
				System.out.println("send over");
			}
		} catch (Exception e) {
			e.getMessage();
		}

	}

	/**
	 * run method
	 */
	public void run() throws Exception {
		new Thread(new Runnable() {
			public void run() {
				try {
					/**
					 * 摦懺暘攝丂port,埲屻幚尰
					 */
					/*new RemoteControlServer(remotePort).server();*/
					new RemoteControlServer(6000).server();
				} catch (Exception e) {

				}
			}
		}).start();
		new Thread(new Runnable() {
			public void run() {
				try {
					/**
					 * 摦懺暘攝丂port,埲屻幚尰
					 */
					/*new FileAccept().acceptFile(fileSendPort);*/
					new FileAccept().acceptFile(6001);
				} catch (Exception e) {

				}
			}
		}).start();
		frame.setSize(width, height);
		Dimension sreen = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frameSize = frame.getSize();
		frame.setLocation((sreen.width - frameSize.width) / 2,
				(sreen.height - frameSize.height) / 2);
		frame.setResizable(false);
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.addWindowListener(new WindowAdapter() {
			public void windowClosed(WindowEvent e) {
				try {
					File recordsFile = new File(recordsPath);
					if (!recordsFile.exists()) {
						recordsFile.createNewFile();
					}
					RandomAccessFile raf = new RandomAccessFile(recordsFile,
							"rw");
					raf.skipBytes((int) raf.length());
					raf.write(areaDisplayMsg.getText().getBytes());
					raf.close();
					// tell friends i am leaving
					sendBroadcastMsg(0);
				} catch (Exception ex) {
					ex.getMessage();
				}
				System.exit(0);
			}
		});
		// menu panel
		JPanel panelMenuBlock = new JPanel();
		JMenu file = new JMenu("File");
		JMenu tool = new JMenu("Tool");
		// file 's item
		JMenuItem itemOpenFile = new JMenuItem("Open File");
		JMenuItem itemFileTrans = new JMenuItem("File Trans");
		// tool 's item
		JMenuItem itemSend = new JMenuItem("Send Message");
		JMenuItem itemSendAll = new JMenuItem("Send Msg to all");
		JMenuItem itemName = new JMenuItem("Set MyName");
		JMenuItem itemRefresh = new JMenuItem("Refresh Friends List");
		JMenuItem itemRemoteDesk = new JMenuItem("Remote Desk");
		// file transfer
		itemFileTrans.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (friends.getSelectedIndices().length != 0) {
					// send file
					sendFile();
				} else {
					JOptionPane.showMessageDialog(null,
							"please select friends", "no friends selected!",
							JOptionPane.WARNING_MESSAGE);
				}

⌨️ 快捷键说明

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