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)休息一下就解决 ...
随机推荐
- C 语言统计关键字出现次数
#include <stdio.h> #include <ctype.h> #include <string.h> #define NKEYS (sizeof ke ...
- sharepoint 2013 附件控件FileUpload怎样检验是否为图片的方法
记录一下关于附件控件FileUpload怎样检验是否为图片的方法: function checkImg() { var fileObj =document.getElementById('<%= ...
- node.js第十课(HTTPserver)
概念:Node.js提供了http模块.当中封装了一个高效的HTTPserver和一个简单的HTTPclient. http.server是一个基于事件的HTTP服务器.内部用C++实现 ...
- 完整的RecylerView的使用方法和例子
一.RecylerView的特点 1. 不关心Item是否显示在正确的位置,通过设置不同LayoutManager 的实例让Item显示不同的风格. 2. 不关心 Item间如何分离.要定义It ...
- Executor框架
Executor框架是指java5中引入的一系列并发库中与executor相关的功能类,包括Executor.Executors.ExecutorService.CompletionService. ...
- stdcall、cdecl、fastcall、thiscall 、naked call的汇编详解
函数调用规范 当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个.什么样的参数.即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者 ...
- 基于Sql Server 2008的分布式数据库的实践(一)
原文 基于Sql Server 2008的分布式数据库的实践(一) 配置Sql Server 2008(Win7) 1.打开SQL server2012,使用windows身份登录 2.登录后,右键选 ...
- 浅析Java中的反射机制原理
反射反射,程序员的快乐! Java中反射机制使用的还是比较广泛的,系统的灵活性.可扩展性大都都是通过反射等方式来加载外部插件,使得系统与插件解耦的同时,增加了功能.但是很多人都只是会用,却是不知道它的 ...
- Adobe Acrobat Ⅺ Pro安装激活
1.注意一定要断网安装,如果你有防火墙拦截亦可(注意:系统自带那防火墙不行). 2.将AcrobatPro_11_Web_WWMUI.exe解压到一个目录下,找到目录下的setup.exe安装,安装时 ...
- activity变成Dialog的样式设置
1.属性解析 <item name="android:windowFrame">@null</item> :Dialog的windowFrame框为无< ...