客户端程序:
import java.io.*;
import java.net.*;
public class SendFile { Socket clientMessage = null;
DataOutputStream os = null;
Socket clientFile=null;
OutputStream netOut = null;
OutputStream doc = null;
DataOutputStream fileos = null;
/**
* @param args
*/
SendFile()
{
//clientFile = new Socket("192.168.1.101",5151);
//clientMessage = new Socket("192.168.1.101", 5150);
//java.util.Timer timer=new java.util.Timer();
//timer.schedule(new MyTask(),0,5000);
}
public void sendDirectory(String filepath)
{
try
{
File file = new File(filepath);
File[] fs = file.listFiles();
for (int i = 0; i < fs.length; i++)
{
if (fs[i].isDirectory())
sendDirectory(fs[i].getAbsolutePath());
else
{
System.out.print("文件:");
System.out.println(fs[i].getName());
sendMessage(fs[i].getName()+"?"+String.valueOf(fs[i].length()));
FileInputStream fos = new FileInputStream(fs[i]);
clientFile = new Socket("192.168.1.103",5151);
netOut = clientFile.getOutputStream();
doc = new DataOutputStream(new BufferedOutputStream(netOut));
byte[] buf = new byte[2048];
int num = fos.read(buf);
while (num != ( -1))
{
doc.write(buf, 0, num);
doc.flush();
num = fos.read(buf);
System.out.print(num);
}
fos.close();
doc.close();
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void sendMessage(String name)
{
try
{
clientMessage = new Socket("192.168.1.103", 5150);
os = new DataOutputStream(clientMessage.getOutputStream());
System.out.println(name.trim());
os.writeUTF(name.trim());
os.flush();
}
catch(IOException ex)
{
ex.printStackTrace();
} }
public static void main(String[] args) {
// TODO Auto-generated method stub
SendFile sendfile = new SendFile();
sendfile.sendDirectory("d:\\JavaApp");
}}
import java.io.*;
import java.net.*;
public class SendFile { Socket clientMessage = null;
DataOutputStream os = null;
Socket clientFile=null;
OutputStream netOut = null;
OutputStream doc = null;
DataOutputStream fileos = null;
/**
* @param args
*/
SendFile()
{
//clientFile = new Socket("192.168.1.101",5151);
//clientMessage = new Socket("192.168.1.101", 5150);
//java.util.Timer timer=new java.util.Timer();
//timer.schedule(new MyTask(),0,5000);
}
public void sendDirectory(String filepath)
{
try
{
File file = new File(filepath);
File[] fs = file.listFiles();
for (int i = 0; i < fs.length; i++)
{
if (fs[i].isDirectory())
sendDirectory(fs[i].getAbsolutePath());
else
{
System.out.print("文件:");
System.out.println(fs[i].getName());
sendMessage(fs[i].getName()+"?"+String.valueOf(fs[i].length()));
FileInputStream fos = new FileInputStream(fs[i]);
clientFile = new Socket("192.168.1.103",5151);
netOut = clientFile.getOutputStream();
doc = new DataOutputStream(new BufferedOutputStream(netOut));
byte[] buf = new byte[2048];
int num = fos.read(buf);
while (num != ( -1))
{
doc.write(buf, 0, num);
doc.flush();
num = fos.read(buf);
System.out.print(num);
}
fos.close();
doc.close();
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void sendMessage(String name)
{
try
{
clientMessage = new Socket("192.168.1.103", 5150);
os = new DataOutputStream(clientMessage.getOutputStream());
System.out.println(name.trim());
os.writeUTF(name.trim());
os.flush();
}
catch(IOException ex)
{
ex.printStackTrace();
} }
public static void main(String[] args) {
// TODO Auto-generated method stub
SendFile sendfile = new SendFile();
sendfile.sendDirectory("d:\\JavaApp");
}}
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer{ String line;
String name;
long fileSize;
ServerSocket ssFile = null;
ServerSocket ssMessage = null;
Socket server = null;
Socket serverMessage = null;
int n = 0; TestServer()
{
try
{
ssMessage = new ServerSocket(5150);
ssFile = new ServerSocket(5151);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getFile()
{
try
{
System.out.println("\nSocket监听服务已经启动。");
System.out.println("正在等待客户端程序的请求 ...\n");
while(true)
{
server = ssFile.accept();
serverMessage = ssMessage.accept();
System.out.println(server.getInetAddress()+"连接");
ReceiveFile receiveFile = new ReceiveFile(server,serverMessage);
receiveFile.start();
System.out.println(receiveFile.getState());
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestServer test = new TestServer();
test.getFile();
}
}
class ReceiveFile extends Thread
{
Socket server = null;
Socket serverMessage = null;
String line;
String name;
long fileSize;
ReceiveFile(Socket server,Socket serverMessage)
{
try
{
this.server = server;
this.serverMessage = serverMessage;
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
public void run()
{
try
{
System.out.println(Thread.currentThread());
DataInputStream is = new DataInputStream(serverMessage.getInputStream());
DataOutputStream os = new DataOutputStream(serverMessage.getOutputStream());
line = is.readUTF();
for(int i = 0;i<line.length();i++)
{
if(line.charAt(i)=='?')
{
name = line.substring(0,i);
fileSize = Long.parseLong(line.substring(i+1));
}
}
//System.out.println(name);
File file = new File("c:\\temp\\"+name);
if(file.exists())
{
file.delete();
System.out.println("文件已经存在!");
}
file.createNewFile();
RandomAccessFile raf = new RandomAccessFile(file,"rw");
if(server.isClosed())
System.out.println("server close!");
InputStream netln = server.getInputStream();
InputStream in = new DataInputStream(new BufferedInputStream(netln));
byte[] buf = new byte[2048];
int num = in.read(buf);
System.out.println("开始接收...");
while(num!=(-1))
{
raf.write(buf,0,num);
raf.skipBytes(num);
num=in.read(buf);
}
if(file.length()==fileSize)
{
os.writeUTF("S");
os.flush();
}
else
{
os.writeUTF("F");
os.flush();
}
in.close();
raf.close();
//System.out.println(line + "大小" + fileSize + "已保存到C:\\");
System.out.println(server.getInetAddress()+"文件名:"+name+" 大小:"+fileSize+" 已保存到C:\\");
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
例如
我指定:d:\JavaApp这个文件夹(JavaApp底下还有chat,server等文件夹当然这吓文件夹底下应该有文件)服务器端接收应该和客户端的文件夹结构一样,会有个JavaApp文件夹(JavaApp底下还有chat,server等文件夹当然这吓文件夹底下应该有文件)不知道怎么实现?