Java Socket 编程---文件传输程序
原创文章,转载须标明出处
一个简单的文件传输程序,客户端可通过文件选择器选择文件,服务端用来接受文件,接受文件的路径是写死的。
(1)server:
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
Socket socket = server.accept();
System.out.println("已连接上客户端,请选择要发送的文件:");
DataInputStream name = new DataInputStream(socket.getInputStream());
//接受文件
byte[] bs = new byte[1024];
FileOutputStream fileout = new FileOutputStream(new File("C:\\接受文件\\"+name.readUTF()));
int len;
while( -1 != (len = name.read(bs)) ) {
fileout.write(bs,0,len);//往硬盘里面写
fileout.flush();
}
//关闭
name.close();
fileout.close();
socket.close();
server.close();
}
}
(2)client:
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JFileChooser;
public class client {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1",9999);
DataOutputStream name = new DataOutputStream(socket.getOutputStream());
//准备要发送的文件
JFileChooser chooser = new JFileChooser();
//chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.showOpenDialog(null);
String path = chooser.getSelectedFile().getPath();
//System.out.println(path);
File file = new File(path);
name.writeUTF(file.getName());
InputStream filein = new FileInputStream(file);
byte[] fileBytes = new byte[1024];
int len = 0;
while(-1 != (len = filein.read(fileBytes))) {
name.write(fileBytes,0,len);
name.flush();
}
System.out.println("发送完成!");
//关闭
filein.close();
name.close();
socket.close();
}
}