zoukankan      html  css  js  c++  java
  • TCP客户端图片上传服务端保存本地示例

    //TCP客户端
    public
    class TCPClient { public static void main(String[] args)throws IOException { Socket socket = new Socket("127.0.0.1",8888); OutputStream out = socket.getOutputStream(); FileInputStream fis = new FileInputStream("d:\jay.jpg"); byte[] data = new byte[1024]; int len = 0; while((len = fis.read(data)) != -1){ out.write(data,0,len); } //给服务器写终止序列 socket.shutdownOutput(); //得到的回应 InputStream in = socket.getInputStream(); len = in.read(data); System.out.println(new String(data,0,len)); //关闭资源 fis.close(); socket.close(); } }

    TCP服务端:

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Random;
    
    public class TCPServer {
    
        public static void main(String[] args) throws IOException{
            ServerSocket server = new ServerSocket(8888);
            Socket socket = server.accept();
            //处理客户端传来的文件流
            InputStream in = socket.getInputStream();
            File upload = new File("d:\upload");
            if(!upload.exists()){
                upload.mkdir();
            }
            String filename = "taobao" + System.currentTimeMillis() + new Random().nextInt(999999) +".jpg";
            FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);
            int len = 0;
            byte[] data = new byte[1024];
            while((len = in.read(data)) != -1){
                fos.write(data,0,len);
            }
    
            //回复客户端
            socket.getOutputStream().write("上传成功!".getBytes());
            
            //关闭流资源
            fos.close();
            socket.close();
            server.close();
        }
    
    }

     进阶:(多线程图片上传服务)

    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TCPThreadServer {
    
        public static void main(String[] args) throws IOException{
            ServerSocket server = new ServerSocket(8888);
            while(true){
                //获取到一个客户端,必须开启新线程
                Socket socket = server.accept();
                new Thread(new Upload(socket)).start();            
            }
        }
    
    }

    TCP服务端代码封装到 run 方法中

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Random;
    
    public class Upload implements Runnable{
        private static Socket socket;
        
        public Upload(Socket socket){
            this.socket = socket;
        }
        
        public void run(){
            try{
                //处理客户端传来的文件流
                InputStream in = socket.getInputStream();
                File upload = new File("d:\upload");
                if(!upload.exists()){
                    upload.mkdir();
                }
                String filename = "itcast" + System.currentTimeMillis() + new Random().nextInt(999999) +".jpg";
                FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);
                int len = 0;
                byte[] data = new byte[1024];
                while((len = in.read(data)) != -1){
                    fos.write(data,0,len);
                }
    
                //回复客户端
                socket.getOutputStream().write("上传成功!".getBytes());
                
                //关闭流资源
                fos.close();
                socket.close();
            }catch(Exception ex){}
            
        }
    }
  • 相关阅读:
    POJ 3659 Cell Phone Network(树的最小支配集)(贪心)
    2017 Hackatari Codeathon C. Arcade(DP)(滚动数组)
    2017 Hackatari Codeathon B. 2Trees(深搜)(想法)
    Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana(分块)
    Codeforces Round #407 (Div. 2) D. Weird journey(欧拉路)
    HDU 5669 Road(线段树建树)(分层图最短路)
    【bzoj2763】[JLOI2011]飞行路线 (分层图最短路)(优先队列dij)
    sed命令基本用法
    linux文本编辑器vim
    oracle row_number() over(partition by .. order by ..)和rank() over(partition by .. order by ..) 和dense_rank() over(partition by .. order by ..)的相似点与区别
  • 原文地址:https://www.cnblogs.com/ivan5277/p/10139979.html
Copyright © 2011-2022 走看看