2007-08-10
利用Socket进行文件传输
关键字: Java Socket 文件传输
最近项目中用到文件传输,用户上传文件,必须在两台服务器上保留备份,用Socket解决的;下面是我剥离出来的Socket原程序,可以直接使用。
java 代码
- /*
- * JCPClient.java
- *
- * Created on 2007年8月9日, 下午5:08
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
- package clienttoserver;
- /**
- *
- * @author julycn
- */
- 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
- 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
- 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
- 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 代码
- /*
- * JCPServer.java
- *
- * Created on 2007年8月9日, 下午5:25
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
- package clienttoserver;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- *
- * @author julycn
- */
- 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();
- }
- }
- }
java 代码
- /*
- * CPThread.java
- *
- * Created on 2007年8月9日, 下午5:04
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
- package clienttoserver;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- *
- * @author julycn
- */
- 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
- b += in.read(cmd, b, cmd.length-b);
- }
- int ends = 0;
- for(int i=0;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
- b += in.read(filename, b, filename.length-b);
- }
- ends = 0;
- for(int i=0;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
- b += in.read(filesize, b, filesize.length-b);
- }
- ends = 0;
- for(int i=0;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();
- }
- }
- }
- 浏览: 56329 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
我的相册
seam.jpg
共 13 张
共 13 张
最近加入圈子
最新评论
-
Gwt-Ext学习笔记之基础篇
问题已经解决
-- by chinahcl -
Gwt-Ext学习笔记之基础篇
[ERROR] Unable to find 'com/google/gwt/u ...
-- by chinahcl -
Gwt-Ext学习笔记之基础篇
谢谢楼主,楼主厉害
-- by chinahcl -
Seam实例教程(环境配置)
不好意思,为什么照你这样做的,但是会报错, 10:30:39,562 INFO ...
-- by yuyanshan -
Seam实例教程(环境配置)
总算自己弄明白了
-- by afadgaeg






评论排行榜