c/s练习——多个客户端上传图片到服务端(tcp)

原创 2012年03月26日 13:35:57

我们使用tcp上传图片,设计思路是:服务端一直开着,客户端上传图片,需要给服务端一个图片的路径,在服务端使用客户端的文件名在保存。如果重名,我们就加一个序号。因为图片上传我们使用的是字节流,所有我们先用一个长度为100的字节数组开保存文件名。然后服务端使用前面一百个数据开获取文件名

下面贴出源码:

客户端:

package com.hsj.net.upload;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Arrays;
import java.util.Scanner;

public class UpLoadPicThreadClient {

    public static void main(String[] args) throws Exception {

        
        System.out.println("请输入你要上传的图片的路径:");        
        Scanner scanner=new Scanner(System.in);
        String filename=scanner.nextLine();
        if(!(filename.endsWith(".jpg")||filename.endsWith(".png")||filename.endsWith(".gif"))){
            throw new RuntimeException("请输入一个图片格式的文件");
        }
        File file=new File(filename);
        if(!file.exists()||!file.isFile()){
            throw new RuntimeException("你输入的不是一个存在的标准的文件");
        }
        if(file.length()>12*1024*1024){
            throw new RuntimeException("只能接受小于5m的图片");
        }
        Socket s=new Socket("128.0.0.47",10010);        
        FileInputStream filein=new FileInputStream(file);
        BufferedInputStream ips=new BufferedInputStream(filein);            
        String fileName=file.getName();
        
        byte[] filearr=Arrays.copyOf(fileName.getBytes(), 1024);
        
        InputStream in=s.getInputStream();
        
        OutputStream out=s.getOutputStream();        
        
        byte[] buf=new byte[1024];
        int len=0;
    
        out.write(filearr);
        
        while((len=ips.read(buf))!=-1){
            out.write(buf, 0, len);
            out.flush();
        }        
        s.shutdownOutput();        
        len=in.read(buf);
        String info=new String(buf,0,len);
        System.out.println(info);
        filein.close();
        ips.close();
        s.close();        
    }

}

==========================================================================================

需要多线程执行的代码,编写一个类实现runnable接口

package com.hsj.net.upload;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class ThreadUp implements Runnable {

    private Socket s;

    public ThreadUp(Socket s) {
        this.s = s;
    }

    public void run() {
        try {
            String addr = s.getInetAddress().getHostAddress();
            System.out.println("客户端ip: " + addr);
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            byte[] buf = new byte[1024];
            int len = 0;
            byte[] filearr = new byte[1024];
            len = in.read(filearr, 0, 1024);
            int i = 0;
            for (; i < filearr.length; i++) {
                if (filearr[i] == 0)
                    break;
            }
            String info = new String(filearr, 0, i);
            File file = new File(info);
            int count = 1;
            while (file.exists()) {
                file = new File(info.substring(0, info.lastIndexOf(".")) + "("
                        + (count++) + ")"
                        + info.substring(info.lastIndexOf("."), info.length()));
            }
            BufferedOutputStream ops = new BufferedOutputStream(
                    new FileOutputStream(file));
            while ((len = in.read(buf)) != -1) {
                ops.write(buf, 0, len);
                ops.flush();
            }
            out.write("图片上传成功".getBytes());
            out.flush();
            s.shutdownOutput();
            s.close();
            ops.close();

        } catch (Exception e) {
        }
    }

}

==============================================

服务端代码:

package com.hsj.net.upload;

import java.net.ServerSocket;
import java.net.Socket;
public class UpLoadPicThreadServer {

    public static void main(String[] args) throws Exception {

        ServerSocket ss = new ServerSocket(10010);
        while(true){            
            Socket s = ss.accept();
            new Thread(new ThreadUp(s)).start();
        }
    }

}



c# 实现对图片上传的接收

引用: using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlCo...

JavaWeb-1-IOS或Android客户端上传图片到Java服务端存到数据库,再从数据库取出下载下来的过程

前言:一直想写段代码实现IOS或Android客户端上传图片到Java服务端存到数据库,再从数据库取出下载下来的过程,今天终于忍不住将代码吐了出来,这里仅提供了Javaweb端servlet的响应代码...
  • IOT_LI
  • IOT_LI
  • 2015年10月17日 12:01
  • 2960

Tcp从Socket客户端上传文件到ServerSocket服务端

目的: 从客户端上传指定的文件到服务端,服务端返回上传结果 思路: 一、客户端:        1.创建客户端Socket,指定好IP地址和端口号        2.创建要上传的文件...

Java IOS客户端上传多张图片到服务端

Java IOS客户端上传多张图片到服务端 相册问题。。。

Java上传图片客户端与服务端

  • 2015年06月08日 01:37
  • 8KB
  • 下载

android 上传图片 客户端与 服务端 方案总结 (包括获取当前的进度)

第一种:        客户端:         package com.hexiaochun; import java.io.ByteArrayOutputStream; import jav...

Tcp:上传图片升级版(满足多个客户端同时上传)(加入线程了)(自编)

import java.io.*; import java.net.*; class L { public static void main(String args[]) throws Ex...

android端上传图片到服务端

android端上传图片到服务端! 服务端是用myeclipse写的Servlet。

qt tcp 一个服务端对多个客户端

  • 2015年07月22日 13:47
  • 16.23MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c/s练习——多个客户端上传图片到服务端(tcp)
举报原因:
原因补充:

(最多只允许输入30个字)