java socket 传送进度_java-★-Socket文件上传/进度条

客户端代码:

1、客户端运行程序:

package wtb.khd;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.OutputStream;

import java.net.Socket;

import javax.swing.JButton;

import javax.swing.JLabel;

import javax.swing.JProgressBar;

public class KHD{

private boolean isnoClose = true;

public boolean isIsnoClose() {

return isnoClose;

}

public void setIsnoClose(boolean isnoClose) {

this.isnoClose = isnoClose;

}

public static void main(String args[]){

final KHD khd = new KHD();

String filePath = "D:\\文件.zip";

khd.setIsnoClose(true);

File upload = new File(filePath);

long fileLength = upload.length();

String fileName = upload.getName();

try {

Socket client = null;

client = new Socket("localhost",8888); //"localhost"--->服务器端IP

OutputStream out = client.getOutputStream();

DataOutputStream dos = new DataOutputStream(out);

dos.writeUTF("文件名前缀_"+fileName);

dos.writeLong(fileLength);

FileInputStream fis = new FileInputStream(upload);

byte[] buffer = new byte[2048];

int len = 0;

double scbl = 0; //文件上传比例

int scdx = 0;  //文件上传大小

final JinDuBar jdb = new JinDuBar("文件上传",System.getProperty("user.dir")+"\\bin\\image\\jindutiao.gif");

String[] uploadInfo = new String[]{"正在上传文件:" + filePath, "文件名称:"+ fileName,

"上传文件大小:"+fileLength+"字节", "已上传:0字节", "上传比例:0%"};

JLabel[] labels = jdb.getLabels();

for(int lxb = 0; lxb

labels[lxb].setText(uploadInfo[lxb]);

}

JProgressBar p = jdb.getProgress();

JButton closeBtn = jdb.getCloseBtn();

closeBtn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {

jdb.dispose();

khd.setIsnoClose(false);

}

});

while ((len = fis.read(buffer)) > 0 && khd.isnoClose) {

Thread.sleep(100);

scdx += len;

scbl = (double)scdx/fileLength;

int bl = (int)(scbl*100);

dos.write(buffer, 0, len);

p.setValue(bl);

p.setString(bl+"%");

String[] gxsc = new String[]{"已上传:"+scdx+"字节", "上传比例:"+bl+"%"};

for(int lxb = 0; lxb

labels[lxb+3].setText(gxsc[lxb]);

}

}

jdb.dispose();

out.close();

fis.close();

client.close();

} catch (Exception e1) {

e1.printStackTrace();

}

}

}

/****************************/

2、进度条

package wtb.util;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Cursor;

import java.awt.Dimension;

import java.awt.GridLayout;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JProgressBar;

import javax.swing.JWindow;

@SuppressWarnings("serial")

public class JinDuBar extends JWindow{

private JProgressBar progress;

private JButton btn;

private JLabel[] labels = new JLabel[5];

private JButton closeBtn;

public JProgressBar getProgress() {

return progress;

}

public void setProgress(JProgressBar progress) {

this.progress = progress;

}

public JButton getBtn() {

return btn;

}

public void setBtn(JButton btn) {

this.btn = btn;

}

public JLabel[] getLabels() {

return labels;

}

public void setLabels(JLabel[] labels) {

this.labels = labels;

}

public JButton getCloseBtn() {

return closeBtn;

}

public void setCloseBtn(JButton closeBtn) {

this.closeBtn = closeBtn;

}

public JinDuBar(String title,String bgImg){

setAlwaysOnTop(true);

setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

JPanel splash = new JPanel(new BorderLayout());

JPanel top = new JPanel();

top.setBackground(new Color(255,153,204));

BorderLayout toplay = new BorderLayout();

top.setLayout(toplay);

JLabel tt = new JLabel(title);

ImageIcon cloImg = new ImageIcon(System.getProperty("user.dir") + "/bin/image/4.png");

closeBtn = new JButton("close ",cloImg);

closeBtn.setBackground(new Color(255,153,204));

top.add(tt, BorderLayout.CENTER);

top.add(closeBtn, BorderLayout.EAST);

top.add(new JLabel("   "), BorderLayout.WEST);

splash.add(top,BorderLayout.NORTH);

ImageIcon img = new ImageIcon(bgImg);

btn = new JButton(img);

getLayeredPane().add(btn, new Integer(Integer.MIN_VALUE));

btn.setBounds(0,0,img.getIconWidth(),img.getIconHeight());

GridLayout gl = new GridLayout(this.getLabels().length,1); //labels.length行1列

btn.setLayout(gl);

for(int i = 0; i

this.getLabels()[i] = new JLabel("000"+i);

btn.add(labels[i]);

}

splash.add(btn, BorderLayout.CENTER);

progress = new JProgressBar(1, 100);

progress.setStringPainted(true);

progress.setBorderPainted(false);

progress.setString("0%");

progress.setBackground(Color.WHITE);

splash.add(progress, BorderLayout.SOUTH);

setContentPane(splash);

Dimension screen = getToolkit().getScreenSize();

setSize(img.getIconWidth(), img.getIconHeight()+60);

setLocation((screen.width - getSize().width)/2, (screen.height - getSize().height)/2);

new DragJWindow(this, splash);  //设置窗口可拖动

setVisible(true);

}

}

/********************************/

3、设置Window窗口可拖动

package wtb.util;

import javax.swing.SwingUtilities;

import java.awt.Component;

import java.awt.Point;

import java.awt.Window;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionAdapter;

public class DragJWindow {

private Window fWindow;

private Component fComponent;

private int dX;

private int dY;

public DragJWindow(Window window, Component component) {

fWindow = window;

fComponent = component;

fComponent.addMouseListener(createMouseListener());

fComponent.addMouseMotionListener(createMouseMotionListener());

}

private MouseListener createMouseListener() {

return new MouseAdapter() {

@Override

public void mousePressed(MouseEvent e) {

Point clickPoint = new Point(e.getPoint());

SwingUtilities.convertPointToScreen(clickPoint, fComponent);

dX = clickPoint.x - fWindow.getX();

dY = clickPoint.y - fWindow.getY();

}

};

}

private MouseMotionAdapter createMouseMotionListener() {

return new MouseMotionAdapter() {

@Override

public void mouseDragged(MouseEvent e) {

Point dragPoint = new Point(e.getPoint());

SwingUtilities.convertPointToScreen(dragPoint, fComponent);

fWindow.setLocation(dragPoint.x - dX, dragPoint.y - dY);

}

};

}

}

/******************************************/

/******************************************/

服务器端:

1、服务器端运行程序

package wtb.fwq;

import java.net.ServerSocket;

import java.net.Socket;

import wtb.fwq.UploadThread;

public class UploadServer {

public final static String fileDir = "E:\\wtb";

public static void main(String args[]) throws Exception {

ServerSocket server = null ;

Socket client = null ;

server = new ServerSocket(8888);

while(true){

client = server.accept();

//为每个用户设置一个线程

UploadThread uft = new UploadThread(client, fileDir);

new Thread(uft).start();

}

}

}

/*************************************/

2、为每个用户设置一个线程的线程类

package wtb.fwq;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.net.Socket;

public class UploadThread implements Runnable {

private Socket client;

private String fileDir;

private String fileName;

public UploadThread(Socket client, String fileDir){

this.client = client;

this.fileDir = fileDir;

}

public void run(){

InputStream in = null ;

FileOutputStream fos = null;

try {

in = client.getInputStream();

DataInputStream dis = new DataInputStream(in);

fileName = dis.readUTF();

long fileLength = dis.readLong();

long xzdx = 0;

fos = new FileOutputStream(fileDir+File.separator+fileName);

byte[] buffer = new byte[1024];

int len = 0;

while ((len = dis.read(buffer)) > 0)

{

fos.write(buffer, 0, len);

xzdx += len;

}

fos.flush();

fos.close();

in.close();

client.close() ;

if(xzdx != fileLength){  //如果文件未传完,则删除传到服务器端的文件

File f = new File(fileDir+File.separator+fileName);

f.delete();

}

}catch(Exception e){

System.out.println("异常!!!!");

}

}

}

/************************/

运行结果视图:

71f84cdcf0567749243a24d6116df43d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言中typedef和define的区别

点击上方蓝字关注我&#xff0c;了解更多咨询1、typedef仅限于为类型定义符号名称。define不仅可以为类型定义别名&#xff0c;还可以为数值定义别名。例如&#xff0c;可以将1定义为ONE。2、typedef由编译器解释&#xff0c;define语句由预编译器处理。实例#include <stdio…

c语言中预处理器是什么?

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言有预处理器&#xff0c;Java中没有这个概念&#xff0c;其实只是文本替换工具。2、C的预处理器&#xff0c;即CPP&#xff0c;将在实际编译器中完成处理&#xff0c;所有预处理命令将从#开始。实例#include <stdio.h>…

垃圾回收算法以及垃圾回收器_什么是垃圾回收?

垃圾回收算法以及垃圾回收器以下是我们的垃圾收集手册中的一个示例&#xff0c;该手册将在接下来的几周内发布。 同时&#xff0c;花点时间熟悉垃圾收集的基础知识-这将是本书的第一章。 乍一看&#xff0c;垃圾收集应该处理顾名思义的问题–查找并丢弃垃圾。 实际上&#xff…

c语言中fgetc函数的介绍

点击上方蓝字关注我&#xff0c;了解更多咨询1、fgetc函数返回的字符实际上是文件流中位置指针指向的字符。当fgetc函数读取错误时&#xff0c;返回EOF并设置文件错误标志位。2、该函数以无符号char强制转换为int的形式返回读取的字符&#xff0c;如果到达文件末尾或出现读错&a…

花5分钟了解C语言基本语法元素快来

点击上方蓝字关注我&#xff0c;了解更多咨询C语言是一种编程语言&#xff0c;和其它语言一样&#xff0c;也定义了自己的语法和词汇。学习C语言&#xff0c;首先要学习C语言的词汇&#xff0c;再学习C语言的语法规则&#xff0c;然后由词汇构成语句&#xff0c;由语句构成源程…

c语言中ftell函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言函数ftell用于获取文件位置指针当前位置相对于文件首的偏移字节数。2、通过ftell函数获取当前文件的大小&#xff0c;然后通过fread函数读取缓冲区。返回值&#xff0c;如果成功&#xff0c;该函数返回位置标识符的当前值&a…

jdk入门_JDK 9 REPL:入门

jdk入门会议是聚会Java名人的好地方。 Devoxx France是与Java语言架构师&#xff0c;前同事和老朋友Brian Goetz&#xff08; briangoetz &#xff09;见面的一个机会。 我们谈论了JDK 9&#xff0c;而他全都热衷于REPL。 他提到&#xff0c;尽管Java SE 9中有很多重要功能 &am…

c语言中局部变量是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、函数内部定义的变量称为局部变量&#xff0c;其作用域仅限于函数内部&#xff0c;离开函数后无效&#xff0c;使用后报错。2、局部变量只能在函数内部使用&#xff0c;离开函数后无效&#xff0c;再次使用会报错。实例#include &…

java接口自动化Excel占位符_基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport的接口自动化测试框架...

接口自动化框架项目说明本框架是一套基于mavenjavaTestNGhttpclientpoijsonpathExtentReport而设计的数据驱动接口自动化测试框架&#xff0c;TestNG 作为执行器&#xff0c;poi用于读取存放于excel的接口用例&#xff0c;jsonPath用于校验返回值&#xff0c;以及提取返回值。本…

C语言为什么要定义short,int,long这么多整数类型?

点击上方蓝字关注我&#xff0c;了解更多咨询整数类型有int、short int、long int三种类型&#xff0c;用于需要不同存储空间的整数使用。整数类型有正整数和负整数之分&#xff0c;在C语言中&#xff0c;规定整型的最高位为符号位&#xff0c;最高位为“0”表示正数&#xff0…

c语言中函数参数类型的探究

点击上方蓝字关注我&#xff0c;了解更多咨询函数中的参数个数可以是0&#xff0c;也可以是一个或多个参数。下面我们带着这三种不同的情况&#xff0c;分别在c语言中进行讨论。1、函数没有参数&#xff0c;表示没有参数列表。int func1(); //声明一个函数&#xff0c;该函数…

c语言野指针产生的原因

点击上方蓝字关注我&#xff0c;了解更多咨询1、指针变量未初始化&#xff0c;任何指针变量刚被创建时不会自动成为 NULL 指针&#xff0c;它的缺省值是随机的。所以&#xff0c;指针变量在创建的同时应当被初始化&#xff0c;要么将指针设置为 NULL &#xff0c;要么让它指向合…

c语言中assert函数的使用注意

点击上方蓝字关注我&#xff0c;了解更多咨询1、使用assert检查函数开始时传入参数的合法性。2、每个assert只检验一个条件&#xff0c;因为在同时检验多个条件时&#xff0c;如果断言失败&#xff0c;就无法直观地判断哪个条件失败。实例int resetBufferSize(int nNewSize) {/…

es 调整gc_实际中进行GC调整

es 调整gc调优垃圾回收与任何其他性能调优活动没有什么不同。 您需要确保您了解当前的情况和所需的结果&#xff0c;而不是因为对应用程序的随机部分进行调整而产生了诱惑。 通常&#xff0c;只需执行以下过程即可&#xff1a; 陈述您的绩效目标 运行测试 测量 与目标比较…

c语言中assert函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、assert将通过检查表达式expresion的值来决定是否需要终止执行程序。2、如果表达式expresion的值是假的(即0)&#xff0c;它将首先向标准错误流stderr打印错误信息。通过调用abort函数终止程序运行。否则&#xff0c;assert没有效…

sci检索没有馆藏号_转变馆藏

sci检索没有馆藏号您是否曾经想替换过HashSet或HashMap使用的equals和hashCode方法&#xff1f; 或者有一个List的一些元素类型伪装成的List相关类型的&#xff1f; 转换集合使这成为可能&#xff0c;并且本文将展示如何实现。 总览 转换集合是LibFX 0.3.0的一项功能&#xf…

c语言中exit和return的区别

点击上方蓝字关注我&#xff0c;了解更多咨询1、返回函数值的return是关键字&#xff0c;exit是一个函数。return是语言级的&#xff0c;它表示调用堆栈的返回&#xff1b;exit是系统调用级的&#xff0c;它表示一个过程的结束。2、return是函数的退出&#xff0c;exit是进程的…

java怎样返回json_java怎么返回json

详细内容本篇文章将介绍如何编写Java程序来返回Json数据&#xff0c;本次以三个方式进行介绍。推荐课程&#xff1a;Java教程&#xff0c;方式1&#xff1a;当然是手敲所有代码&#xff0c;来进行json数据的返回。需要 HttpHttpServletRequest request HttpServletResponse res…

c语言中realloc函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、判断当前指针是否有足够的连续空间。如果足够&#xff0c;扩大ptr指向的地址并返回。如果不够&#xff0c;如何根据size指定的大小分配空间&#xff0c;将原始数据复制到新分配的内存中&#xff0c;然后释放原始ptr指向的区域。2…

java jsp学习指南_JSP教程–最终指南

java jsp学习指南编者注&#xff1a; JavaServer Pages&#xff08;JSP&#xff09;技术使您可以轻松创建同时包含静态和动态组件的Web内容。 JSP技术提供了Java Servlet技术的所有动态功能&#xff0c;但提供了一种更自然的方法来创建静态内容。 JSP技术的主要功能包括用于开…