如何实现多线程文件传输! 如何实现多线程文件传输,那位高手能给个例子我看看!一个服务器,多个客户端。多个客户端连同一服务器,如何使用多线程? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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(); } }} 对JAVA入门的迷茫-请高手明鉴! 如何使双击表格的单元格后不出现编辑框 求助 高分求助啦!!! 关于java 网络传输封包的问题 如何设置JVM内存?????在线等待,立即结帐!!!! java 读写 word (带排版格式) 报错时的解决方法 JAVA小程序的问题(初学者)!!! 设置CLASSPATH环境变量真的有必要吗? 一个关于SOCKET的问题? 关于文件对话框的问题,我想通过文件话框得到一个指定的目录
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();
}
}
}