如何实现多线程文件传输!
如何实现多线程文件传输,那位高手能给个例子我看看!一个服务器,多个客户端。多个客户端连同一服务器,如何使用多线程? 问题点数:50、回复次数:3Top
1 楼treeroot(旗鲁特)回复于 2006-03-20 12:46:22 得分 0
upTop
2 楼Kyori_YR()回复于 2006-03-20 13:50:01 得分 0
高手门,来看看Top
3 楼Java_yR_26()回复于 2006-03-30 09:18:31 得分 50
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 Test{
String line;
String name;
long fileSize;
ServerSocket ssFile = null;
ServerSocket ssMessage = null;
Socket server = null;
Socket serverMessage = null;
int n = 0;
Test()
{
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
Test test = new Test();
test.getFile();
}
}
class ReceiveFile extends Thread
{
Socket server = null;
Socket serverMessage = null;
String line;
String name;
long fileSize;
String filePath;
int s,e;
boolean state;
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)=='|')
{
state = true;
}
}
if(state)
{
for(int i = 0;i<line.length();i++)
{
if(line.charAt(i)=='?')
{
name = line.substring(0,i);
s = i+1;
}
if(line.charAt(i)=='|')
{
filePath = line.substring(i+1);
e = i;
}
}
fileSize = Long.parseLong(line.substring(s,e));
//System.out.println(name);
File file = new File("c:\\temp\\"+filePath+File.separator);
file.mkdirs();
System.out.println(file.getAbsolutePath()+File.separator+name);
File filename = new File(file.getAbsolutePath()+File.separator+name);
if(filename.exists())
{
filename.delete();
System.out.println("文件已经存在!");
}
filename.createNewFile();
RandomAccessFile raf = new RandomAccessFile(filename,"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(filename.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:\\temp\\");
}
else
{
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();
}
}
}
Top




