📄 tnt.java
字号:
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 + -