package wei.guo.fileTransportation.ServerAndClient;import java.io.IOException;
import java.net.ServerSocket;import wei.guo.fileTransportaion.bean.User;public class FileReceiver extends Thread
{
private ServerSocket ss = null;
//文件传输的监听端口
private int FILE_PORT;
private User user = null;
private String savePath = "";
public FileReceiver(User user)
{
//设置文件端口
this.user = user;
this.FILE_PORT = user.getPort();
this.savePath = "F://";
}
public void run()
{
try
{
ss = new ServerSocket(FILE_PORT);
System.out.println("用户端开始监听:"+ss);
while(true)
{
java.net.Socket socket = ss.accept();
System.out.println("连接接受"+socket);
new FileReceiverThread(user,socket,savePath);
}
}
catch(IOException e)
{
e.printStackTrace();
}
catch(java.lang.Exception ex)
{
System.err.println(ex.getMessage().toString());
ex.printStackTrace();
}
finally
{
try
{
ss.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args){
User user = new User("127.0.0.1",6655,"1234332");
FileReceiver fr = new FileReceiver(user);
fr.start();
System.out.println("...........................");
}
}
package wei.guo.fileTransportation.ServerAndClient;import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Date;import wei.guo.fileTransportaion.bean.User;public class FileReceiverThread extends Thread
{
private java.net.Socket socket = null;
//从客户端读数据的
private java.io.DataInputStream in = null;
//向客户端写数据
private java.io.DataOutputStream out = null;
private String savePath = "";
private User sender =null;
private User receiver =null;
private FileOutputStream fos = null;
public FileReceiverThread (User user,Socket socket,String savePath)
{
this.receiver=user;
this.socket = socket;
this.savePath = savePath;
try {
this.in = new DataInputStream(this.socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
//启动线程
this.start();
} public void run()
{
//传输前时间
Date before = new Date();
//文件名接收
String fileName = null;
try {
fileName = in.readUTF();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("文件名:"+fileName);
//文件大小接收
long size = 0;
try {
size = in.readLong();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("文件大小:"+size);
//文件接收
savePath += fileName;
File file = new File(savePath);
try {
fos = new FileOutputStream(file);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] buf = new byte[1024*1000];
int read = 0;
System.out.println("准备开始接收文件!\n");
try {
while(in.read(buf)!=-1){
System.out.println(buf);
//fos.write(buf);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("文件成功传输完成!\n");
Date after = new Date();
long time = (after.getTime()-before.getTime())/1000;
System.out.println("文件传输共计用时:"+time+"秒"+"\n");
//关闭并释放流连接和Socket连接
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
this.socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}package wei.guo.fileTransportation.ServerAndClient;import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;import wei.guo.fileTransportaion.bean.User;public class FileSender extends Thread
{
//客户端socket
private Socket socket = null;
//向服务器写数据
private DataOutputStream out = null;
//文件输入流
private DataInputStream dis = null;
//要传输的文件
private File fileToSend = null;
//用户对象e
private User receiver = null;
//传输端口
private int port = 0;
//接收者IP
private String IP = "";
public FileSender(File file,User user)
{
this.fileToSend = file;
this.receiver = user;
port = user.getPort();
IP = user.getIP();
} public void run()
{
try
{
this.socket = new Socket(IP,port);
//向接收者发数据的
out = (DataOutputStream) socket.getOutputStream();
}
catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
//向接收方发送文件名
String fileName = fileToSend.getName();
try {
out.writeUTF(fileName);
System.out.println("文件名:"+fileName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//向接收方发送文件大小
long fileSize = fileToSend.getTotalSpace();
try {
out.writeLong(fileSize);
System.out.println("文件大小:"+fileSize);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
int read = 0;
byte[] fileBuf = new byte[1024*1000];
try {
dis = new DataInputStream(new BufferedInputStream(new FileInputStream(fileToSend)));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("准备开始传输文件!");
while(true){
try {
read += dis.read(fileBuf);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(read == -1){
break;
}
try {
out.write(fileBuf);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("文件传输完成!");
//关闭流和Socket
try {
socket.close();
dis.close();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
File file = new File("D://1.txt");
User user = new User("127.0.0.1",6655,"1231233");
FileSender fs = new FileSender(file,user);
fs.start();
}}
先运行FileReceiver.java
用户端开始监听:ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=6655]
然后运行FileSender.java
连接接受Socket[addr=/127.0.0.1,port=51209,localport=6655]
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.net.SocketInputStream.read(SocketInputStream.java:182)
文件名:null
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:320)
at java.io.DataInputStream.readUTF(DataInputStream.java:572)
at java.io.DataInputStream.readUTF(DataInputStream.java:547)
at wei.guo.fileTransportation.ServerAndClient.FileReceiverThread.run(FileReceiverThread.java:54)
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:113)
at java.io.DataInputStream.readFully(DataInputStream.java:178)
at java.io.DataInputStream.readLong(DataInputStream.java:399)
at wei.guo.fileTransportation.ServerAndClient.FileReceiverThread.run(FileReceiverThread.java:63)
文件大小:0
准备开始接收文件!java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:113)
at java.io.DataInputStream.read(DataInputStream.java:83)
at wei.guo.fileTransportation.ServerAndClient.FileReceiverThread.run(FileReceiverThread.java:82)
文件成功传输完成!文件传输共计用时:0秒
请大侠们帮忙指导指导
//用户IP
private String IP;
//用户端口号
private int port;
//用户Id
private String UserId;
//构造方法
public User(String ip, int port, String userId) {
this.IP = ip;
this.port = port;
this.UserId = userId;
}
//IP的get和set方法
public void setIP(String IP){
this.IP = IP;
}
public String getIP(){
return IP;
}
//port的get和set方法
public void setPort(int port){
this.port = port;
}
public int getPort(){
return port;
}
//UserId的get和set方法
public void setUserId(String UserId){
this.UserId = UserId;
}
public String getUserId(){
return UserId;
}
}
大侠还是要谢谢你了!
用户端开始监听:ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=6655]
连接接受Socket[addr=/127.0.0.1,port=52622,localport=6655]
文件名:1.txt
文件大小:78650093568
准备开始接收文件!文件成功传输完成!文件传输共计用时:0秒