上传文本文件
客户端:
publicstaticvoid main(String[] args)throws UnknownHostException,IOException {
//建立客户端Socket
Socketsocket =new Socket("localhost", 10005);
//获取输出流
PrintWriterout =newPrintWriter(socket.getOutputStream(),true);
//获取本地的文件流
BufferedReaderbufr =new BufferedReader(new FileReader(new File("D:\\list.txt")));
//开始上传
System.out.println("开始上传");
Stringline =null;
while((line =bufr.readLine())!=null){
out.println(line);
}
// out.println("over");
socket.shutdownOutput();//发送过去一个结束标志告诉服务器端结束
//获取上传后的信息
BufferedReaderbufIn =new BufferedReader(newInputStreamReader(socket.getInputStream()));
while((line =bufIn.readLine())!=null){
System.out.println(line);
}
//关闭资源
socket.close();
}
服务器端
publicstaticvoid main(String[] args)throws IOException {
//创建服务器端的ServerSocket
ServerSocketss =new ServerSocket(10005);
//获取客户端的Socket
Socket s= ss.accept();
//获取Socket输入流
BufferedReaderbufIn =new BufferedReader(newInputStreamReader(s.getInputStream()));
//将数据存储到服务器
File file=new File("D:\\load\\loadlist.txt");
if(!file.exists()){
file.createNewFile();
}
BufferedWriterbufw =new BufferedWriter(new FileWriter(file));
//上传
Stringline =null;
while((line =bufIn.readLine())!=null){//客户端结束,服务器端不能结束,等待。使用自定义的结束标志
if("over".equals(line)){
break;
}
bufw.write(line);
bufw.newLine();
bufw.flush();//必须刷新
}
//上传成功
s.getOutputStream().write("上传成功".getBytes());
s.close();
ss.close();
}
上传媒体文件
客户端
publicstaticvoid main(String[] args)throws UnknownHostException,IOException {
//建立客户端Socket
Socketsocket =new Socket("localhost", 10006);
//获取输出流
OutputStreamout = socket.getOutputStream();
//获取本地的文件流
Filefile =new File("D:\\love.mp3");
byte[] buf =newbyte[1024];
int len = 0;
FileInputStreamin =new FileInputStream(file);
//开始上传
System.out.println("开始上传");
Stringline =null;
while((len =in.read(buf))!=-1){
out.write(buf,0, len);
}
// out.println("over");
socket.shutdownOutput();//发送过去一个结束标志告诉服务器端结束
//获取上传后的信息
BufferedReaderbufIn =new BufferedReader(newInputStreamReader(socket.getInputStream()));
while((line =bufIn.readLine())!=null){
System.out.println(line);
}
//关闭资源
socket.close();
}
服务器端
publicstaticvoid main(String[] args)throws IOException {
//创建服务器端的ServerSocket
ServerSocketss =new ServerSocket(10006);
//获取客户端的Socket
Sockets = ss.accept();
//获取Socket输入流
InputStreamin = s.getInputStream();
//将数据存储到服务器
Filefile =new File("D:\\load\\love.mp3");
FileOutputStreamout =new FileOutputStream(file);
//上传
Stringline =null;
byte[] buf =newbyte[1024];
int len = 0;
while((len =in.read(buf))!=-1){//客户端结束,服务器端不能结束,等待。使用自定义的结束标志
out.write(buf,0, len);
}
//上传成功
s.getOutputStream().write("上传成功".getBytes());
s.close();
ss.close();
}
实现多客户端的上传
服务器端的改变
class ReadOrWriteimplements Runnable{
private Sockets ;
@Override
publicvoid run() {
int count = 0;
try {
InputStream in =s.getInputStream();
Filedir =new File("D:\\load");
if(!dir.exists()){
dir.mkdirs();
}
Filefile =new File(dir,".mp3");
while(file.exists()){
file =new File(dir,"("+(++count)+")"+".mp3");
}
FileOutputStreamout =new FileOutputStream(file);
Stringline =null;
byte[] buf =newbyte[1024];
int len = 0;
while((len =in.read(buf))!=-1){//客户端结束,服务器端不能结束,等待。使用自定义的结束标志
out.write(buf,0, len);
}
s.getOutputStream().write("上传成功".getBytes());
s.close();
}catch (IOException e) {
//TODO Auto-generated catchblock
e.printStackTrace();
}
}
public ReadOrWrite(Socket s) {
super();
this.s = s;
}
}
Public static void main(String[] args){
ServerSocket ss = new ServerSocket(10005);
while(true){
Sockets = ss.accept();
new Thread(new ReadOrWrite(s)).start();
}
}