java实现客户端向服务器发送文件
本文实例为大家分享了java实现客户端向服务器发送文件的具体代码,供大家参考,具体内容如下
服务器源代码:
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.net.ServerSocket;
importjava.net.Socket;
/**
*
*文件名:ServerReceive.java
*实现功能:作为服务器接收客户端发送的文件
*
*具体实现过程:
*1、建立SocketServer,等待客户端的连接
*2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据
*其中保存客户端要发送的文件名和文件大小信息
*3、根据文件名在本地创建文件,并建立好流通信
*4、循环接收数据包,将数据包写入文件
*5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件
*6、文件接收工作结束
*
*
*【注:此代码仅为演示客户端与服务器传送文件使用,
*每一个数据包之前没有文件协议命令
*具体的协议传输和文件传出的使用阶段可根据自己程序自行放置】
*
*
*作者:小菜鸟
*创建时间:2014-08-19
*
**/
publicclassServerReceive{
publicstaticvoidmain(String[]args){
/**与服务器建立连接的通信句柄*/
ServerSocketss=null;
Sockets=null;
/**定义用于在接收后在本地创建的文件对象和文件输出流对象*/
Filefile=null;
FileOutputStreamfos=null;
/**定义输入流,使用socket的inputStream对数据包进行输入*/
InputStreamis=null;
/**定义byte数组来作为数据包的存储数据包*/
byte[]buffer=newbyte[4096*5];
/**用来接收文件发送请求的字符串*/
Stringcomm=null;
/**建立socekt通信,等待服务器进行连接*/
try{
ss=newServerSocket(4004);
s=ss.accept();
}catch(IOExceptione){
e.printStackTrace();
}
/**读取一行客户端发送过来的约定信息*/
try{
InputStreamReaderisr=newInputStreamReader(s.getInputStream());
BufferedReaderbr=newBufferedReader(isr);
comm=br.readLine();
}catch(IOExceptione){
System.out.println("服务器与客户端断开连接");
}
/**开始解析客户端发送过来的请求命令*/
intindex=comm.indexOf("/#");
/**判断协议是否为发送文件的协议*/
Stringxieyi=comm.substring(0,index);
if(!xieyi.equals("111")){
System.out.println("服务器收到的协议码不正确");
return;
}
/**解析出文件的名字和大小*/
comm=comm.substring(index+2);
index=comm.indexOf("/#");
Stringfilename=comm.substring(0,index).trim();
Stringfilesize=comm.substring(index+2).trim();
/**创建空文件,用来进行接收文件*/
file=newFile(filename);
if(!file.exists()){
try{
file.createNewFile();
}catch(IOExceptione){
System.out.println("服务器端创建文件失败");
}
}else{
/**在此也可以询问是否覆盖*/
System.out.println("本路径已存在相同文件,进行覆盖");
}
/**【以上就是客户端代码中写到的服务器的准备部分】*/
/**
*服务器接收文件的关键代码*/
try{
/**将文件包装到文件输出流对象中*/
fos=newFileOutputStream(file);
longfile_size=Long.parseLong(filesize);
is=s.getInputStream();
/**size为每次接收数据包的长度*/
intsize=0;
/**count用来记录已接收到文件的长度*/
longcount=0;
/**使用while循环接收数据包*/
while(count
客户端源代码:
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.io.PrintStream;
importjava.net.Socket;
/**
*
*文件名:ClientSend.java
*实现功能:作为客户端向服务器发送一个文件
*
*具体实现过程:
*1、建立与服务器端的连接,IP:127.0.0.1,port:4004
*2、将文件的名字和大小通过自定义的文件传输协议,发送到服务器
*3、循环读取本地文件,将文件打包发送到数据输出流中
*4、关闭文件,结束传输
*
*【注:此代码仅为演示客户端与服务器传送文件使用,
*每一个数据包之前没有文件协议命令
*具体的协议传输和文件传出的使用阶段可根据自己程序自行放置】
*
*
*作者:小菜鸟
*创建时间:2014-08-19
*
**/
publicclassClientSend{
publicstaticvoidmain(String[]args){
/**与服务器建立连接的通信句柄*/
Sockets=null;
/**定义文件对象,即为要发送的文件
*如果使用绝对路径,不要忘记使用'/'和'\'的区别
*具体区别,请读者自行查询
**/
Filesendfile=newFile("API.CHM");
/**定义文件输入流,用来打开、读取即将要发送的文件*/
FileInputStreamfis=null;
/**定义byte数组来作为数据包的存储数据包*/
byte[]buffer=newbyte[4096*5];
/**定义输出流,使用socket的outputStream对数据包进行输出*/
OutputStreamos=null;
/**检查要发送的文件是否存在*/
if(!sendfile.exists()){
System.out.println("客户端:要发送的文件不存在");
return;
}
/**与服务器建立连接*/
try{
s=newSocket("127.0.0.1",4004);
}catch(IOExceptione){
System.out.println("未连接到服务器");
}
/**用文件对象初始化fis对象
*以便于可以提取出文件的大小
**/
try{
fis=newFileInputStream(sendfile);
}catch(FileNotFoundExceptione1){
e1.printStackTrace();
}
/**首先先向服务器发送关于文件的信息,以便于服务器进行接收的相关准备工作
*具体的准备工作,请查看服务器代码。
*
*发送的内容包括:发送文件协议码(此处为111)/#文件名(带后缀名)/#文件大小
**/
try{
PrintStreamps=newPrintStream(s.getOutputStream());
ps.println("111/#"+sendfile.getName()+"/#"+fis.available());
ps.flush();
}catch(IOExceptione){
System.out.println("服务器连接中断");
}
/**
*此处睡眠2s,等待服务器把相关的工作准备好
*也是为了保证网络的延迟
*读者可自行选择添加此代码
**/
try{
Thread.sleep(2000);
}catch(InterruptedExceptione1){
e1.printStackTrace();
}
/**之前的准备工作结束之后
*下面就是文件传输的关键代码
**/
try{
/**获取socket的OutputStream,以便向其中写入数据包*/
os=s.getOutputStream();
/**size用来记录每次读取文件的大小*/
intsize=0;
/**使用while循环读取文件,直到文件读取结束*/
while((size=fis.read(buffer))!=-1){
System.out.println("客户端发送数据包,大小为"+size);
/**向输出流中写入刚刚读到的数据包*/
os.write(buffer,0,size);
/**刷新一下*/
os.flush();
}
}catch(FileNotFoundExceptione){
System.out.println("客户端读取文件出错");
}catch(IOExceptione){
System.out.println("客户端输出文件出错");
}finally{
/**
*将打开的文件关闭
*如有需要,也可以在此关闭socket连接
**/
try{
if(fis!=null)
fis.close();
}catch(IOExceptione){
System.out.println("客户端文件关闭出错");
}//catch(IOExceptione)
}//finally
}//publicstaticvoidmain(String[]args)
}//publicclassClientSend
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。