您的位置:首页 > 职场人生

《黑马程序员》 图片上传服务端的多线程技术的体现

2014-03-06 14:05 204 查看
------- android培训java培训、期待与您交流! ----------
package cn.itcast.p4.task;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class UploadClient {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/**
* 图片上传客户端的建立:
* */

//建立客户端连接
Socket s=new Socket("172.168.151.212",10000);

//使用文件读取流和源文件关联
FileInputStream fis=new FileInputStream("d:\\vail1.png");

//获取socket流将数据发送给服务端
OutputStream out=s.getOutputStream();

//读取源数据,并发送给服务端
byte [] buf=new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1){
out.write(buf,0,len);
}
//告诉服务端,数据发送完毕。可能关闭流了
s.shutdownOutput();

//获取服务端返回的信息
InputStream ins=s.getInputStream();

byte [] buin=new byte[1024];
int mess=ins.read(buin);
String text=new String(buin,0,mess);
System.out.println(text);
//关闭资源
//关闭普通流,socket流不需要关闭,因为一关闭,通道就不存在了。数据就无法进行传输了。
fis.close();
s.close();
}
}

package cn.itcast.p4.task;
import java.io.File;
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 UploadServer {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/**
* 服务端的建立:
* */
//创建服务端
ServerSocket ss=new ServerSocket(10000);

while(true){
//获取客户端
Socket s=ss.accept();
new Thread(new UploadTask(s)).start();
}
//  ss.close();

}
}

package cn.itcast.p4.task;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class UploadTask implements Runnable {
private Socket s;
int count=0;  //用于给文件编号使用

public UploadTask(Socket s) {
super();
this.s = s;
}

@Override
public void run() {
//获取客户端的信息
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+".....connection");

try {
//获取socket流读取客户端的数据
InputStream in=s.getInputStream();

//创建目的,用于将读取到的图片数据写入到目的地中
File dir=new File("c:\\pic");
if(!dir.exists()){
dir.mkdirs();
}
//封装文件名
File file=new File(dir,ip+".jpg");
//如果使用ip做为文件的名称存在的话,就使用ip+编号来做为文件名称。
while(file.exists()){
file=new File(dir,ip+"("+(++count)+").jpg");
}

//使用文件输出流和文件相关联
FileOutputStream fos=new FileOutputStream(file);

//读取数据并进行存储
byte [] buf=new byte[1024];
int len=0;
while((len=in.read(buf))!=-1){
fos.write(buf,0,len);
}

//返回信息给客户端
OutputStream out=s.getOutputStream();
out.write("图片上传成功".getBytes());

//关闭资源,关闭流,关闭服务端
fos.close();
s.close();
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}

}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息