📄 myclient.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 + -