java实现文件传输
在windows下装了个linux虚拟机,两者之间传输文件挺麻烦的.写了个简单的文件传输程序,来方便自己数据传送.
server 端:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

class CPThread extends Thread...{
Socket socket = null;
public CPThread(Socket socket)...{
this.socket = socket;
}
public void run()...{
try...{
InputStream in =
socket.getInputStream();
PrintWriter out =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())),true);
while(true)
...{
//第一个參数为命令
byte cmd[] = new byte[128];
int b = 0;
while(b<cmd.length)...{
b += in.read(cmd, b, cmd.length-b);
}
int ends = 0;
for(int i=0;i<cmd.length;i++)...{
if(cmd[i]=='-0')...{
ends = i;
break;
}
}
String cmds = new String(cmd,0,ends);
if("exit".equals(cmds))...{
System.exit(0);
}
else if("cp".equals(cmds))...{
byte[] filename = new byte[256];
b = 0;
while(b<filename.length)...{
b += in.read(filename, b, filename.length-b);
}
ends = 0;
for(int i=0;i<filename.length;i++)...{
if(filename[i]=='-0')...{
ends = i;
break;
}
}
String filenames = new String(filename,0,ends);
File fileout = new File(filenames);
if(fileout.isFile())...{
throw new Exception("file exists"+fileout.getAbsolutePath());
}
FileOutputStream fos = new FileOutputStream(fileout);
byte[] filesize = new byte[64];
b = 0;
while(b<filesize.length)...{
b += in.read(filesize, b, filesize.length-b);
}
ends = 0;
for(int i=0;i<filesize.length;i++)...{
if(filesize[i]=='-0')...{
ends = i;
break;
}
}
String filesizes = new String(filesize,0,ends);
System.out.println("filesize:"+filesizes);
int ta = Integer.parseInt(filesizes);
byte[] buf = new byte[1024*10];
//InputStream ins = socket.getInputStream();
while(true)...{
if(ta==0)...{
break;
}
int len = ta;
if(len>buf.length)...{
len = buf.length;
}
int rlen = in.read(buf, 0, len);
//int rlen = ins.read(buf, 0, len);
ta -= rlen;
if(rlen>0)...{
fos.write(buf,0,rlen);
fos.flush();
}
else...{
break;
}
}
out.println("cp finish!");
fos.close();
break;
}
else...{
System.out.println("err command!");
out.println("err command!");
break;
}
}
socket.close();
}catch(Exception e)...{
e.printStackTrace();
}
}
}
public class JCPServer ...{

/** *//**
* @param args
*/
public static void main(String[] args) throws Exception ...{
// TODO Auto-generated method stub
int num = args.length;
if(num<=0)...{
System.out.println("please input server port!");
System.exit(0);
}
int port = Integer.parseInt(args[0]);
System.out.println("you input port:"+port);
//绑定接受数据端口
ServerSocket s = new ServerSocket(port);
while(true)...{
Socket socket = s.accept();
new CPThread(socket).start();
}
}
}
client 端
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;


public class JCPClient ...{

/** *//**
* @param args
*/
public static void main(String[] args)throws Exception ...{
// TODO Auto-generated method stub
int num = args.length;
if(num<=3)...{
System.out.println("please input server ip port filefrom fileto!");
System.exit(0);
}
System.out.println("host:"+args[0]);
System.out.println("port:"+args[1]);
System.out.println("filefrom:"+args[2]);
System.out.println("fileto:"+args[3]);
InetAddress addr = InetAddress.getByName(args[0]);
Socket socket =
new Socket(addr, Integer.parseInt(args[1]));
OutputStream out = socket.getOutputStream();
byte[] cmd = new byte[128];
byte[] tcmd = "cp".getBytes();
for(int i=0;i<tcmd.length;i++)...{
cmd[i] = tcmd[i];
}
cmd[tcmd.length] = '-0';
out.write(cmd,0,cmd.length);
//文件名称
byte[] file = new byte[256];
byte[] tfile = args[3].getBytes();
for(int i=0;i<tfile.length;i++)...{
file[i] = tfile[i];
}
file[tfile.length] = '-0';
out.write(file,0,file.length);
//大小
File filein = new File(args[2]);
byte[] size = new byte[64];
byte[] tsize = (""+filein.length()).getBytes();

for(int i=0;i<tsize.length;i++)...{
size[i] = tsize[i];
}
size[tsize.length] = '-0';
out.write(size,0,size.length);
FileInputStream fis = null;
byte[] buf = new byte[1024*10];
//char[] bufC = new char[1024*10];
fis = new FileInputStream(filein);
int readsize = 0;
//OutputStream ops = socket.getOutputStream();
while((readsize = fis.read(buf, 0, buf.length))>0)...{
out.write(buf,0,readsize);
out.flush();
}
socket.close();
}
}
java实现文件传输的更多相关文章
- Java简单文件传输 socket简单文件传输示例
服务器端代码: import java.io.*; import java.net.*; /** * Created with IntelliJ IDEA. * User: HYY * Date: 1 ...
- Java Tcp文件传输---转载
/** 客户端 1.服务端点 2.读取客户端已有的文件数据 3.通过socket输出流发给服务端 4.读取服务端反馈信息 5.关闭 **/ import java.io.*; import java. ...
- java 接口 文件传输
调用接收端 @ApiOperation(value = "文件请求展示方法") @RequestMapping(value = "/showFile", met ...
- java对于文件传输时---编码格式的一些设置方法
- ----转 读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够 ...
- 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)
目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...
- Java基于Socket文件传输示例(转)
最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加 ...
- java基于P2P的聊天和文件传输实例
用java的NIO技术编写的 1. 支持聊天功能 2. 拖拽文件能够实现文件传输功能.也能够是目录 3. 启动时能够选择server端或client端启动 4. 本人原创.学习NIO和java的网络通 ...
- Java使用Socket传输文件遇到的问题(转)
1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...
- Java使用Socket传输文件遇到的问题
1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...
随机推荐
- 设计模式总结4--singleton pattern
单例模式 保证每个类只有一个实例,并提供一个全局访问点 第一步 构造方法私有化第二步 公有化静态方法获取的实例 懒汉式 public class Bank{ private Bank(){} pri ...
- 用Xamarin 实现园友的 :Android浮动小球与开机自启动
原文:用Xamarin 实现园友的 :Android浮动小球与开机自启动 前两天看园子里有筒子写了个 Android浮动小球与开机自启动 , 感觉这种被 360 玩烂的功能原来是如此的简单啊... ...
- [置顶] High Performance Canvas Game for Android
Rule #0 为移动平台进行优化 为移动平台进行优化是十分重要的,因为移动平台的性能大概只有桌面平台的1/10左右(*1),它通常意味着: 更慢的CPU速度,这意味着不经过优化的JavaScript ...
- 介绍一款开源的类Excel电子表格软件
Excel一直以霸主的地位,占领了Windows桌面表格软件市场No 1,与此同一时候,Office套装产品差点儿成为了IT行业的标配办公技能.有无相似Excel的桌面程序,绿色版,实现主要的数 ...
- 数矩形(N - 暴力求解、打表)
数矩形 Description 给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格. Input 第一行输入一个t, 表示有t组数据,然后 ...
- CodeForces 546D Soldier and Number Game 打表(求质因子个数)
题目:戳我这个题与HDUOJ 5317有异曲同工之妙 题意:题意看懂了上面的一大串英文之后其实很简单,就是给你一个正整数n,问你n有多少个质因子,不过这里n是通过a!/b!给定的,也就是说n=(a!/ ...
- [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)
题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...
- ibatis3.0调用Oracle的存储过程
直接上源码 一,oracle储存过程. create or replace procedure proc_get_th(i_hth in varchar2,o_ret out sys_refcurso ...
- JSONP跨域的原理解析[转]
转自 http://www.nowamagic.net/librarys/veda/detail/224 JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中, ...
- 杭电--1862--EXCEL排序--结构体排序
EXCEL排序 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...