一、文件的下载发送
文件的下载是指客户端从服务器端下载一个文件到客户端;
比如LOL的客户端,是要去LOL的官方服务器上把客户端的安装包下载到本地后再安装。
思路:
/**
* 1.启动服务器并且等待客户端上线
* 2.客户端连接服务器
* 3.客户端告知服务器要下载的文件名
* 4.服务器接收文件名并在本地找到对应文件
* 5.服务器将该文件从硬盘读到内存中,再写入网络中
* 6.客户端从网络上下载该文件,并保存到本地
* 7.关闭连接
*/
创建FileServer类:
main方法:
-
建立服务器
//1\创建服务器
ServerSocket ss=new ServerSocket(5566);
//2\等待客户端
Socket sk=ss.accept();//6\服务器接受来自客户端发送的文件路径 //请下载e:\temp\abc.rar
InputStream is=sk.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String fname=br.readLine(); //fname=e:\temp\abc.rar//7\服务器开始读取本地文件
File f=new File(fname); //File f=new File(“e:\temp\abc.rar”);
if(f.exists()){
//创建文件的字节读流
FileInputStream fis=new FileInputStream(f);
BufferedInputStream bis=new BufferedInputStream(fis);
byte[] bs=new byte[100];//到客户端的套接字写流 OutputStream os=sk.getOutputStream(); BufferedOutputStream bos=new BufferedOutputStream(os); //8\一边读取文件一边将文件的字节流输入到网络的套接字中 while(bis.read(bs)!=-1){ bos.write(bs); bos.flush(); } bos.close(); bis.close(); br.close();
}
创建FileClient类:
main方法:
//3\客户端连接到服务器
Socket sk=new Socket(InetAddress.getByName("127.0.0.1"), 5566);
//4\客户端由用户输入要下载的文件名
Scanner mys=new Scanner(System.in);
System.out.println("请输入你要下载的文件名:"); //e:\\temp\\abc.rar
String filename=mys.next(); //filename=e:\\temp\\abc.rar
//5\客户端将文件名发送到服务器
OutputStream os=sk.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os)
BufferedWriter bw=new BufferedWriter(osw);
bw.write(filename);
bw.newLine();
bw.flush();
//9\客户端接受来自于服务器的文件的字节流 ,一边读取 一边写到本地
InputStream is=sk.getInputStream();
BufferedInputStream bis=new BufferedInputStream(is);
//文件写流,写到硬盘的哪个文件里
FileOutputStream fos=new FileOutputStream("e:\\temp\\b.rar")
BufferedOutputStream bos=new BufferedOutputStream(fos);
byte[] bs=new byte[100];
//int c=0;
while(bis.read(bs)!=-1){
bos.write(bs);
bos.flush();
//c+=100;
//System.out.println(c);
}
//10\关闭所有
bos.close();
bis.close();
bw.close();
System.out.println("下载完毕");
//界面版聊天
try {
sk = new Socket(InetAddress.getByName(ip), Integer.parseInt(port));
//专门开辟一个线程用来接收数据
new Thread(){
@Override
public void run() {
try {
while(true){
InputStream is = sk.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String str = br.readLine();
jta.append("服务器:"+str+"\n");
}
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}.start();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
一、文件的下载
文件的下载是指客户端从服务器端下载一个文件到客户端;
比如LOL的客户端,是要去LOL的官方服务器上把客户端的安装包下载到本地后再安装。
-------------【总思路】--------------
/**
* 1.启动服务器并且等待客户端上线
* 2.客户端连接服务器
* 3.客户端告知服务器要下载的文件名
* 4.服务器接收文件名并在本地找到对应文件
* 5.服务器将该文件从硬盘读到内存中,再写入网络中
* 6.客户端从网络上下载该文件,并保存到本地
* 7.关闭连接
*/