Socket 简单实现下载功能
2013-04-28 22:34
274 查看
Service:
package com.litao;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Service extends Thread
{
private final ExecutorService pools;
private final ServerSocket serverSocket;
public Service(int port, int poolSize) throws IOException
{
pools = Executors.newFixedThreadPool(poolSize);
serverSocket = new ServerSocket(port);
}
@Override
public void run()
{
for (;;)
{
try
{
pools.execute(new MyThread(serverSocket.accept()));
}
catch (IOException e)
{
pools.shutdown();
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
try
{
Service service = new Service(5555, 100);
service.start();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class MyThread implements Runnable
{
private Socket socket;
public MyThread(Socket socket)
{
this.socket = socket;
}
@Override
public void run()
{
try
{
StringBuilder sb = new StringBuilder();
File dir = new File("demo");
File[] files = dir.listFiles();
for (File file : files)
{
sb.append(file.getName()).append(",").append(file.length())
.append(";");
}
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket
.getOutputStream()));
pw.println(sb);
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
int num = Integer.parseInt(br.readLine());
System.out.println(num);
File f = files[num];
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(f));
BufferedOutputStream bos = new BufferedOutputStream(socket
.getOutputStream());
int len;
while ((len = bis.read()) != -1)
{
bos.write(len);
}
bos.flush();
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
Client:
package com.litao;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client
{
public void request() throws Exception
{
Socket socket = new Socket("localhost", 5555);
BufferedReader br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
String files = br.readLine();
String[] str = files.split(";");
String[] names = new String[str.length];
String[] fileLength = new String[str.length];
for (int i = 0; i < str.length; i++)
{
String[] s = str[i].split(",");
String name = s[0];
names[i] = name;
String fileLen = s[1];
fileLength[i] = fileLen;
System.out.println(i + "," + name + "(" + fileLength + ")");
}
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
if (num >= 0 && num <= str.length)
{
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket
.getOutputStream()));
pw.println(num);
pw.flush();
BufferedInputStream bis = new BufferedInputStream(socket
.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("demo1/" + names[num]));
int len;
long n = 0;
while ((len = bis.read()) != -1)
{
bos.write(len);
if (++n % 1024 == 0)
{
System.out.println(100 * n / Integer.parseInt(fileLength[num]) +"%");
}
}
System.out.println(100 * n / Integer.parseInt(fileLength[num]) +"%");
bos.flush();
}
else
{
System.out.println("Error");
}
socket.close();
}
public static void main(String[] args)
{
Client client = new Client();
try
{
client.request();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
package com.litao;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Service extends Thread
{
private final ExecutorService pools;
private final ServerSocket serverSocket;
public Service(int port, int poolSize) throws IOException
{
pools = Executors.newFixedThreadPool(poolSize);
serverSocket = new ServerSocket(port);
}
@Override
public void run()
{
for (;;)
{
try
{
pools.execute(new MyThread(serverSocket.accept()));
}
catch (IOException e)
{
pools.shutdown();
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
try
{
Service service = new Service(5555, 100);
service.start();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class MyThread implements Runnable
{
private Socket socket;
public MyThread(Socket socket)
{
this.socket = socket;
}
@Override
public void run()
{
try
{
StringBuilder sb = new StringBuilder();
File dir = new File("demo");
File[] files = dir.listFiles();
for (File file : files)
{
sb.append(file.getName()).append(",").append(file.length())
.append(";");
}
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket
.getOutputStream()));
pw.println(sb);
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
int num = Integer.parseInt(br.readLine());
System.out.println(num);
File f = files[num];
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(f));
BufferedOutputStream bos = new BufferedOutputStream(socket
.getOutputStream());
int len;
while ((len = bis.read()) != -1)
{
bos.write(len);
}
bos.flush();
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
Client:
package com.litao;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client
{
public void request() throws Exception
{
Socket socket = new Socket("localhost", 5555);
BufferedReader br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
String files = br.readLine();
String[] str = files.split(";");
String[] names = new String[str.length];
String[] fileLength = new String[str.length];
for (int i = 0; i < str.length; i++)
{
String[] s = str[i].split(",");
String name = s[0];
names[i] = name;
String fileLen = s[1];
fileLength[i] = fileLen;
System.out.println(i + "," + name + "(" + fileLength + ")");
}
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
if (num >= 0 && num <= str.length)
{
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket
.getOutputStream()));
pw.println(num);
pw.flush();
BufferedInputStream bis = new BufferedInputStream(socket
.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("demo1/" + names[num]));
int len;
long n = 0;
while ((len = bis.read()) != -1)
{
bos.write(len);
if (++n % 1024 == 0)
{
System.out.println(100 * n / Integer.parseInt(fileLength[num]) +"%");
}
}
System.out.println(100 * n / Integer.parseInt(fileLength[num]) +"%");
bos.flush();
}
else
{
System.out.println("Error");
}
socket.close();
}
public static void main(String[] args)
{
Client client = new Client();
try
{
client.request();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
相关文章推荐
- Python 3.x--Socket实现简单的ssh和文件下载功能
- socket 编程 TCP 实现简单聊天功能
- 用MVC实现简单的文件(图片)上传下载功能
- MVC 实现下载功能如此简单
- JS中简单的实现像C#中using功能(有源码下载)
- Socket——实现简单的一对一服务器端与客户端聊天功能
- 使用Socket实现最简单的聊天功能
- 用 MPMoviePlayerController 实现简单的视频下载播放功能
- 简单介绍用JSP来实现文件下载功能的几种方式
- 简单实现Servlet文件下载功能
- android Socket实现简单聊天功能以及文件传输
- Node.js的学习日记 图片简单下载和拷贝功能的实现 简单下载和拷贝
- asp.net中实现下载功能就是这样简单/asp.net中实现上传功能也是这样简单
- JSP实现简单的文件下载功能
- Python基于socket实现简单的即时通讯功能示例
- Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二)
- Android中Glide实现超简单的图片下载功能
- 通过ClientSocket 与 ServerSocket实现简单的聊天功能.
- struts2实现简单文件下载功能
- JS中简单的实现像C#中using功能(有源码下载)