📄 lan.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class lan extends WindowAdapter implements ActionListener
{
//定义元素
public static Frame f;
public static Button b1,b2,b3;
public static Label l1,l2,l3,l4,l5,l16,l17,l18,l19,l20,l21,l22;
public static Label[] l=new Label[5];
public static Label[] ll=new Label[5];
MenuBar menubar1;
Menu menu1;
Menu menu2;
MenuItem item1,item2,item3,item4;
public static TextArea tt1,tt2,tt3,tt4;
public static TextField t1;
public static String filename,filename2,filename1; //发送文件名字和地址和文件加地址
public static int i=0;
public static int j=0;
Dialog d1,d2;
public static String panduan1="3";
public static int panduan2=3;
public static int kongzhi=0;
//界面
public void lan()
{
f=new Frame("JAVA局域网文件传输器");
f.setSize(450,610);
f.setLayout(new GridBagLayout()); //网格包布局
f.setResizable(false);
d2= new Dialog(f,"关于作者",true);
d2.addWindowListener(this);
d1= new Dialog(f,"使用说明",true);
d1.addWindowListener(this);
//构造菜单
menubar1=new MenuBar();
menu1=new Menu("文件");
menu2=new Menu("帮助");
item1=new MenuItem("打开");
item2=new MenuItem("退出");
item3=new MenuItem("使用说明");
item4=new MenuItem("关于作者");
f.setMenuBar(menubar1);
menubar1.add(menu1);
menu1.add(item1);
menu1.add(item2);
menubar1.add(menu2);
menu2.add(item3);
menu2.add(item4);
//构造其他元素
l1=new Label("发送文件列表:");
l2=new Label("接收文件列表:");
l3=new Label("*****************************************************");
l5=new Label("接收文件状态:");
l4=new Label("发送文件状态:");
l[0]=new Label("file1");
l[1]=new Label("file2");
l[2]=new Label("file3");
l[3]=new Label("file4");
l[4]=new Label("file5");
ll[0]=new Label("file1");
ll[1]=new Label("file2");
ll[2]=new Label("file3");
ll[3]=new Label("file4");
ll[4]=new Label("file5");
l16=new Label("目的地");
l17=new Label("文件位置");
l18=new Label("文件名");
l19=new Label("来源地");
l20=new Label("存放位置");
l21=new Label("文件名");
l22=new Label("请输入目的地IP地址(192.168.*.*):");
tt1=new TextArea(5,20);
tt1.setEditable(false);
tt2=new TextArea(5,20);
tt2.setEditable(false);
tt3=new TextArea(5,10);
tt3.setEditable(false);
tt4=new TextArea(5,10);
tt4.setEditable(false);
t1=new TextField(13);
b1=new Button("开始发送");
b2=new Button("同意接收");
b3=new Button(" 拒绝接收 ");
//定义网格包布局的约束条件
GridBagConstraints c=new GridBagConstraints();
c.fill=GridBagConstraints.BOTH; //组件在水平位置和垂直位置两个方向都有扩展
c.insets=new Insets(5,5,5,5); //每个边上都有5个像素的边距
//给各个元素分配位置
c.gridx=0;c.gridy=0;c.gridwidth=1;c.gridheight=1;
f.add(l1,c);
c.gridx=3;c.gridy=0;c.gridwidth=1;c.gridheight=1;
f.add(l4,c);
c.gridx=0;c.gridy=1;c.gridwidth=1;c.gridheight=1;
f.add(l16,c);
c.gridx=1;c.gridy=1;c.gridwidth=1;c.gridheight=1;
f.add(l17,c);
c.gridx=2;c.gridy=1;c.gridwidth=1;c.gridheight=1;
f.add(l18,c);
c.gridx=1;c.gridy=2;c.gridwidth=2;c.gridheight=5;
f.add(tt1,c);
c.gridx=0;c.gridy=2;c.gridwidth=1;c.gridheight=5;
f.add(tt3,c);
c.gridx=3;c.gridy=2;c.gridwidth=1;c.gridheight=1;
f.add(l[0],c);
c.gridx=3;c.gridy=3;c.gridwidth=1;c.gridheight=1;
f.add(l[1],c);
c.gridx=3;c.gridy=4;c.gridwidth=1;c.gridheight=1;
f.add(l[2],c);
c.gridx=3;c.gridy=5;c.gridwidth=1;c.gridheight=1;
f.add(l[3],c);
c.gridx=3;c.gridy=6;c.gridwidth=1;c.gridheight=1;
f.add(l[4],c);
c.gridx=0;c.gridy=7;c.gridwidth=1;c.gridheight=1;
f.add(l2,c);
c.gridx=3;c.gridy=7;c.gridwidth=1;c.gridheight=1;
f.add(l5,c);
c.gridx=0;c.gridy=8;c.gridwidth=1;c.gridheight=1;
f.add(l19,c);
c.gridx=1;c.gridy=8;c.gridwidth=1;c.gridheight=1;
f.add(l20,c);
c.gridx=2;c.gridy=8;c.gridwidth=1;c.gridheight=1;
f.add(l21,c);
c.gridx=1;c.gridy=9;c.gridwidth=2;c.gridheight=5;
f.add(tt2,c);
c.gridx=0;c.gridy=9;c.gridwidth=1;c.gridheight=5;
f.add(tt4,c);
c.gridx=3;c.gridy=9;c.gridwidth=1;c.gridheight=1;
f.add(ll[0],c);
c.gridx=3;c.gridy=10;c.gridwidth=1;c.gridheight=1;
f.add(ll[1],c);
c.gridx=3;c.gridy=11;c.gridwidth=1;c.gridheight=1;
f.add(ll[2],c);
c.gridx=3;c.gridy=12;c.gridwidth=1;c.gridheight=1;
f.add(ll[3],c);
c.gridx=3;c.gridy=13;c.gridwidth=1;c.gridheight=1;
f.add(ll[4],c);
c.gridx=0;c.gridy=14;c.gridwidth=4;c.gridheight=1;
f.add(l3,c);
c.gridx=0;c.gridy=15;c.gridwidth=2;c.gridheight=1;
f.add(l22,c);
c.gridx=3;c.gridy=15;c.gridwidth=1;c.gridheight=1;
f.add(t1,c);
c.gridx=0;c.gridy=16;c.gridwidth=1;c.gridheight=1;
f.add(b1,c);
c.gridx=1;c.gridy=16;c.gridwidth=1;c.gridheight=1;
f.add(b2,c);
c.gridx=2;c.gridy=16;c.gridwidth=1;c.gridheight=1;
f.add(b3,c);
//实现各元素功能
//菜单功能实现,注册事件
f.addWindowListener(this);
item1.addActionListener(this);
item2.addActionListener(this);
item3.addActionListener(this);
item4.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
f.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==item1)
{ FileDialog f1=new FileDialog(f,"打开",FileDialog.LOAD);
f1.show();filename1=f1.getFile();filename2=f1.getDirectory();
if(filename1!=null)
{filename=f1.getDirectory()+f1.getFile();
tt1.append(filename+"\n"+"\n"+"\n");
l[i].setText("准备发送");
}
}
else if(e.getSource()==item2)
{System.exit(0);}
else if(e.getSource()==item3)
{
TextArea ttt1= new TextArea("局域网文件传输软件,一用就知道,地球人都知道");
ttt1.setEditable(false);
d1.add(ttt1);
d1.setSize(300,200);
d1.setVisible(true);
}
else if(e.getSource()==item4)
{
TextArea ttt2= new TextArea("作者:我爱java网站长"+"\n" +"IMAIL:maliweigege@126.com");
ttt2.setEditable(false);
d2.add(ttt2);
d2.setSize(300,200);
d2.setVisible(true);
}
else if(e.getSource()==b1)
{
tt3.append(t1.getText()+"\n"+"\n"+"\n");
l[i].setText("可以发送");
kongzhi=1;
}
else if(e.getSource()==b2)
{
panduan2=1;
}
else if(e.getSource()==b3)
{
panduan2=0;
}
}
public void windowClosing(WindowEvent e)
{
if (e.getSource()==f)
{System.exit(0);}
else if (e.getSource()==d1)
{
d1.setVisible(false);
d1.dispose();
}
else if (e.getSource()==d2)
{
d2.setVisible(false);
d2.dispose();
}
}
public static void main(String args[])
{
lan kaishi=new lan();
kaishi.lan();
jieshou j=new jieshou();
j.start();
fasong f=new fasong();
f.start();
}
}
//接收过程
class jieshou extends Thread
{ public InetAddress dizhi;
public static String filename3;
public void run(){
try{
ServerSocket jieshousocket=new ServerSocket(6000);
while(true)
{
Socket connection1=jieshousocket.accept();
dizhi=connection1.getInetAddress();
InputStream netIn3=connection1.getInputStream();
BufferedInputStream in3=new BufferedInputStream(netIn3);
//创建缓冲区缓冲网络数据
byte[] buf3=new byte[2048];
int num3=in3.read(buf3);
while(num3!=(-1)) //是否读完所有数据
{
num3=in3.read(buf3); //继续从网络中读取文件
}
filename3= new String(buf3);
in3.close();
netIn3.close();
lan.tt2.append("当前目录:"+filename3 );
lan.tt2.append("\n"+"\n"+"\n");
lan.tt4.append(connection1.getInetAddress()+"\n"+"\n"+"\n");
lan.ll[lan.j].setText("准备接收");
connection1.close();
while(lan.panduan2==3)
{
}
if (lan.panduan2==0)
{
lan.ll[lan.j++].setText("拒绝接收");
Socket fapanduan=new Socket(dizhi,6001);
OutputStream netOut4=fapanduan.getOutputStream();
OutputStream doc4=new DataOutputStream(new BufferedOutputStream(netOut4));
//创建文件读取缓冲区
byte[] buf4=new byte[1];
String bian0=Integer.toString(lan.panduan2);
buf4 = bian0.getBytes();
int num4=buf4.length;
doc4.write(buf4,0,num4); //把文件数据写出网络缓冲区
doc4.flush(); //刷新缓冲区把数据写往客户端
doc4.close();
netOut4.close();
fapanduan.close();
lan.panduan2=3;
}
else if (lan.panduan2==1)
{
lan.ll[lan.j].setText("正在接收");
Socket fapanduan=new Socket(dizhi,6001);
//创建返回判断给客户端的输出流
OutputStream netOut6=fapanduan.getOutputStream();
BufferedOutputStream doc6=new BufferedOutputStream(netOut6);
//创建文件读取缓冲区
byte[] buf6=new byte[2048];
String bian1=Integer.toString(lan.panduan2);
buf6 = bian1.getBytes();
int num6=buf6.length;
if(num6> 0)
{ //是否读完文件
doc6.write(buf6,0,num6); //把文件数据写出网络缓冲区
doc6.flush(); //刷新缓冲区把数据写往客户端
}
doc6.close();
netOut6.close();
File file=new File(filename3);
file.createNewFile();
FileOutputStream out=new FileOutputStream(file);
ServerSocket jieshou3=new ServerSocket(6002);
Socket jieshou4=jieshou3.accept();
//创建网络接受流接受对方的文件数据
InputStream netIn5=jieshou4.getInputStream();
BufferedInputStream in5=new BufferedInputStream(netIn5);
//创建缓冲区
byte[] buf5=new byte[40960];
int num5=in5.read(buf5);
while(num5!=(-1))
{ //是否读完所有数据
out.write(buf5,0,num5); //将数据写往文件
//顺序写文件字节
num5=in5.read(buf5); //继续从网络中读取文件
}
in5.close();
out.close();
netIn5.close();
jieshou3.close();
jieshou4.close();
lan.ll[lan.j++].setText("接受完毕");
lan.panduan2=3;
}
}
}
catch(Exception e)
{
System.out.println("接受过程出错");
}
}
}
//发送过程
class fasong extends Thread
{
public void run(){
try{
while(true) {
while(lan.kongzhi!=1)
{
}
Socket fasongsocket=new Socket(InetAddress.getByName(lan.t1.getText()),6000);
//创建网络输出流并提供数据包装器
OutputStream netOut=fasongsocket.getOutputStream();
OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut));
//创建文件读取缓冲区
byte[] buf=new byte[2048];
buf = lan.filename1.getBytes();
doc.write(buf,0,buf.length); //把文件数据写出网络缓冲区
doc.flush(); //刷新缓冲区把数据写往客户端
doc.close();
netOut.close();
//接收对方回应,判断对方是否同意接收
ServerSocket jiepanduan=new ServerSocket(6001);
while (lan.panduan1=="3")
{
Socket jiepanduan2=jiepanduan.accept();
InputStream netIn=jiepanduan2.getInputStream();
BufferedInputStream in1=new BufferedInputStream(netIn);
//创建缓冲区缓冲网络数据
byte[] buf1=new byte[1];
int num1=in1.read(buf1);
lan.panduan1=new String(buf1);
netIn.close();
in1.close();
jiepanduan2.close();
jiepanduan.close();
}
//判断是否该发送
while (lan.panduan1.equals("0"))
{
lan.l[lan.i++].setText("对方拒绝");
fasongsocket.close();
lan.panduan1="3";
lan.kongzhi=0;}
while (lan.panduan1.equals("1"))
{
lan.l[lan.i].setText("正在发送");
Socket fasong4=new Socket(InetAddress.getByName(lan.t1.getText()),6002);
File wenjian=new File(lan.filename2,lan.filename1);
FileInputStream fachu=new FileInputStream(wenjian);
OutputStream netOut1 =fasong4.getOutputStream();
BufferedOutputStream doc1=new BufferedOutputStream(netOut1);
//创建文件读取缓冲区
byte[] buf2=new byte[40960];
int num2=fachu.read(buf2);
while(num2!=(-1)){ //是否读完文件
doc1.write(buf2,0,num2); //把文件数据写出网络缓冲区
doc1.flush(); //刷新缓冲区把数据写往客户端
num2=fachu.read(buf2); //继续从文件中读取数据
}
fachu.close();
doc1.close();
netOut.close();
fasong4.close();
lan.l[lan.i++].setText("发送完成");
lan.panduan1="3";
lan.kongzhi=0;
}
}
}
catch(Exception e)
{
System.out.println("发送过程出错");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -