服务端
package Net;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
public class UpLoadServeDemo extends JFrame {
private JTextField textField;
Socket socket;
ServerSocket server;
String fileName;
public UpLoadServeDemo() {
//服务端界面布局
setTitle("上传服务器");
getContentPane().setLayout(null);
JLabel label = new JLabel("监听窗口:");
label.setBounds(86, 80, 74, 15);
getContentPane().add(label);
textField = new JTextField();
textField.setBounds(178, 77, 112, 21);
getContentPane().add(textField);
textField.setColumns(10);
final JButton button = new JButton("启动服务器");
//事件监听
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//使用多线程
new Thread(new Runnable() {
public void run() {
try {
//判断是否给定了端口号
if("".equals(textField.getText()) ){
JOptionPane.showMessageDialog(null, "请输入端口号!!!");
}
else if (Integer.parseInt(textField.getText()) > 65535 || Integer.parseInt(textField.getText()) < 1024 ){
JOptionPane.showMessageDialog(null, "请输入正确的端口号");
}
else if((Integer.parseInt(textField.getText()) < 65535 && Integer.parseInt(textField.getText()) > 1024)){
server = new ServerSocket(Integer.parseInt(textField.getText()));
JOptionPane.showMessageDialog(null, "服务器开启");
textField.setEnabled(false); //控件黑白不可变
button.setEnabled(false);//设置按钮黑白不可变
}
while (true) {
socket = server.accept();
final DataInputStream bufIn = new DataInputStream(
socket.getInputStream());//定义一个数据输入流
final BufferedOutputStream bufOut = new BufferedOutputStream(
socket.getOutputStream());//定义一个缓冲区输出流
new Thread(new Runnable() {
public void run() {
try {
byte[] Name = new byte[1024];//定义一个装文件名的字节数组
bufIn.read(Name);
fileName = new String(Name).trim();//获取上传文件的名字
System.out.println("上传成功,文件:"+fileName);
if (JOptionPane.showConfirmDialog(null, "是否保存" + fileName) == 1) {//弹框 是否保存
return;
}
try {
BufferedOutputStream bufOutFile = new BufferedOutputStream(
new FileOutputStream("d:"+File.separator+"迅雷"+File.separator + fileName));
int line = 0;
byte[] bytes = new byte[1024*1024*100];
//循环读取
while ((line = bufIn.read(bytes)) != -1) {
bufOutFile.write(bytes, 0,line);
bufOutFile.flush();
}
bufOut.write("上传成功".getBytes());
bufOut.flush();
//关流
bufOutFile.close();
bufOut.close();
bufIn.close();
} catch (Exception e) {
// TODO Auto-generated catch
// block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
}).start();
}
});
button.setBounds(73, 145, 93, 23);
getContentPane().add(button);
//事件监听 关闭服务端
JButton button_1 = new JButton("关闭服务器");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//判断服务端是否开启
if("".equals(textField.getText())){
JOptionPane.showMessageDialog(null, "服务器未开启!!!");
}
else{
JOptionPane.showMessageDialog(null, "服务器关闭");
JLabel label1 = new JLabel("123:");
label1.setBounds(50, 12, 74, 15);
getContentPane().add(label1);
//将端口号设为null
socket = null;
//将文本框中的文字颜色和button颜色设为初始值
textField.setEnabled(true);
button.setEnabled(true);
}
}
});
//界面布局
button_1.setBounds(209, 145, 93, 23);
getContentPane().add(button_1);
setBounds(600, 200, 380, 300);
// 设置用户在此窗体上发起 "close(关闭)" 时默认执行的操作。
setDefaultCloseOperation(DISPOSE_ON_CLOSE);//DISPOSE_ON_CLOSE 调用任意已注册 WindowLsistener 的对象后自动隐藏并释放该窗体。
setResizable(false);//关闭最大化
setLocationRelativeTo(null);//居中
setVisible(true);
}
public static void main(String[] args) {
new UpLoadServeDemo();
}
}
客服端
package Net;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.Socket;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.JButton;
public class UploadCilentDemo extends JFrame {
private JTextField textField;//JTextField 单行文本 获取IP地址
private JTextField textField_1;//JTextField 单行文本 获取端口号
private JTextField textField_2;//JTextField 单行文本 获取文件绝对路径
private JProgressBar progressBar;//进度条
File file;//获取文件
public UploadCilentDemo() {
//文件上传界面布局
setTitle("上传客户端");
getContentPane().setLayout(null);//设置布局为null
//添加组件 并给设置位置大小
JLabel lblip = new JLabel("服务器IP:");
lblip.setBounds(37, 40, 69, 15);
getContentPane().add(lblip);
JLabel lblNewLabel = new JLabel("服务器端口:");
lblNewLabel.setBounds(37, 65, 82, 15);
getContentPane().add(lblNewLabel);
textField = new JTextField();
textField.setBounds(129, 37, 139, 21);
getContentPane().add(textField);
textField_1 = new JTextField();
textField_1.setBounds(129, 62, 139, 21);
getContentPane().add(textField_1);
//添加一个测试网络是否联通的测试按钮
JButton button = new JButton("测试网络");
//时间监听
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
//通过获取界面给定的IP和端口号
Socket socket = new Socket(textField.getText(), Integer.parseInt(textField_1.getText()));
textField.setEnabled(false);
textField_1.setEnabled(false);
JOptionPane.showMessageDialog(null, "连接成功");//设置一个弹框
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "IP地址或端口号不正确"
+"\n"+ " 或服务器未开启");
}
}
});
//设置边界值
button.setBounds(301, 61, 93, 23);
getContentPane().add(button);
JLabel lblNewLabel_1 = new JLabel("请输入要上传得文件(包含绝对路径)");
lblNewLabel_1.setBounds(37, 133, 231, 15);
getContentPane().add(lblNewLabel_1);
textField_2 = new JTextField();
textField_2.setBounds(37, 165, 231, 21);
getContentPane().add(textField_2);
textField_2.setColumns(10);
//进度条
progressBar = new JProgressBar();
getContentPane().add(progressBar, BorderLayout.NORTH);
progressBar.setStringPainted(true);
progressBar.setBounds(37, 200,231,15);
progressBar.setBackground(getForeground());
//progressBar.setValue();
setVisible(false);
//选择文件
JButton button_1 = new JButton("浏览");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JFileChooser jchoose = new JFileChooser();//选择器
// jchoose.showDialog(null, "确定");
if (jchoose.showDialog(null, "确定") == 1) {
return;
}
//将jchoose中的文件赋值给file
file = jchoose.getSelectedFile();
//将文件路径给textField_2
textField_2.setText(jchoose.getSelectedFile().toString());
//将文件路径更改为黑色补课更改
textField_2.setEnabled(false);
}
});
button_1.setBounds(301, 164, 93, 23);
getContentPane().add(button_1);
//上传文件 时间监听
JButton button_2 = new JButton("上传");
button_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
//从文本框中获取IP地址和端口号
Socket socket = new Socket(textField.getText(), Integer
.parseInt(textField_1.getText()));
DataOutputStream bufOut = new DataOutputStream(
socket.getOutputStream());
BufferedInputStream bufIn = new BufferedInputStream(
new FileInputStream(file));
System.out.println(file.getName());
bufOut.write(file.getName().getBytes());
bufOut.flush();
//Thread.sleep(1000);//
byte[] bytes = new byte[1024*1024];
int num = 0;
while ((num = bufIn.read(bytes)) != -1) {
bufOut.write(bytes, 0, num);
bufOut.flush();
}
socket.shutdownOutput();
BufferedInputStream bufReback = new BufferedInputStream(
socket.getInputStream());
byte[] b = new byte[1024];
bufReback.read(b);
if (!new String(b).trim().equals(""))
JOptionPane.showMessageDialog(null, "上传成功");
bufIn.close();
bufReback.close();
bufOut.close();
socket.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "请选择文件!!!");
}
}
});
button_2.setBounds(301, 197, 93, 23);//上传按钮位置大小设置
getContentPane().add(button_2);
setBounds(160, 200, 440, 300);//主窗口位置大小设置
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new UploadCilentDemo();
}
}