实现从磁盘上传文件到服务器,服务器通过获取上传文件的文件名与文件内容,存储到指定路径的磁盘中。
连接信息类:
public class Connect {
public static final int port=9999;
public static final String ip="127.0.0.1";
}
Socket类:
public class TestSocket {
public static void main(String[] args) {
client();
}
public static void client() {
File file=new File("E:/a.txt");
Socket socket=null;
BufferedInputStream bis=null;
DataOutputStream dos =null;
try {
socket = new Socket(Connect.ip,Connect.port);
bis = new BufferedInputStream(new FileInputStream(file));
dos = new DataOutputStream(socket.getOutputStream());
//先发送文件名
dos.writeUTF(file.getName());
//再发送数据
byte[] b = new byte[1024];
int len=0;
while((len=bis.read(b))!=-1) {
dos.write(b,0,len);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ServerSocket类:
public class TestServer {
public static void main(String[] args) {
new TestServer().server();
}
public void server() {
System.out.println("服务器已启动");
ServerSocket server =null;
DataInputStream dis=null;
DataOutputStream dos=null;
try {
server = new ServerSocket(Connect.port);
Socket socket = server.accept();
dis=new DataInputStream(socket.getInputStream());
//获取客户端发来的文件名
String name = dis.readUTF();
//接收文件
byte[] b = new byte[1024];
int len=0;
//创建数据流 把从客户端读取的数据 存储到指定路径的磁盘中
dos = new DataOutputStream(new FileOutputStream("D:/"+name));
while((len=dis.read(b))!=-1){
dos.write(b, 0, len);
}
System.out.println("文件接收完毕");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}