TcpPic多上传

package com.tz.util.screen;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import javax.management.RuntimeErrorException;

/**
 * 图片上传
 * 客服端
 * 1.服务端点
 * 2.读取客服端已有的图片数据
 * 3.通过socket输出流将数据发给服务端
 * 4.读取服务端反馈信息
 * 5.关闭
 * @author Administrator
 *
 */

public class TcpPic {

 public static void main(String[] args) throws Exception, Exception {
  if (args.length!=1) {
   System.out.println("请选择一个jpg格式图片");
   return;
  }
  File file=new File(args[0]);
  if (!file.exists()&&file.isFile()) {
   System.out.println("该文件有问题");
  }
  if (!file.getName().endsWith(".jpg")) {
   System.out.println("格式错误");
  }
  if (file.length()>1024*1024*5) {
   System.out.println("文件过大");
   return;
  }
  Socket s=new Socket("192.168.1.254",10007);
  
  FileInputStream fis=new FileInputStream("1.bmp");
  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 in=s.getInputStream();
  byte[] bufIn=new byte[1024];
  int num=in.read(bufIn);
  System.out.println(new String(bufIn,0,num));
  fis.close();
  s.close();
 }

}
/**
 * 服务端
 * 这个服务端游个局限性,当A客服端连接,被服务端获取,服务端执行具体流程,这时B客服端连接,只有等待,因为服务端还没有处理完A客服端的请求,还没有循环回来执行下次accept方法,所以暂时获取不到B对象
 * 为了让多个客服端同时并发访问服务端,那么服务端最好就是讲每个客服端封装到一个单独的线程中,这样,可以同时处理多个客服端请求
 * 定义线程:
 *  明确每一个客服端要在服务端执行的代码即可,将该代码存入Run方法中
 */
class PicThread implements Runnable{
 private Socket s;
 int count=1;
 PicThread(Socket s){
  this.s=s;
 }
 @Override
 public void run() {
  String ip=s.getInetAddress().getHostAddress();
  try {
   
   System.out.println(ip);
   InputStream in=s.getInputStream();
   //用IP命名,避免覆盖
   File file=new File(ip+"("+(count)+")"+".jpg");
   while(file.exists()){
   
    file=new File(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 (Exception e) {
   throw new RuntimeException(ip+"上传失败");
  }
 }
 
}
class PicServer{
 public static void main(String[] args) throws Exception {
  ServerSocket ss=new ServerSocket(10007);
  while(true){
  Socket s=ss.accept();
  new Thread(new PicThread(s)).start();
  }
//  ss.close();
 }
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。