技术中心

这里象征着我们的态度和能力

>socket实现图片上传
发布者:中国IT实验室    信息来源:中国IT实验室    发布时间:2012-01-01      浏览次数:6249
分享到:

新浪微博

腾讯微博

QQ空间

豆瓣网

QQ好友

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

实现思路:

在客户端获取到文件流,将文件流写入到通过socket指定到某服务器的输出流中,在服务器中通过socket获取到输入流,将数据写入到指定的文件夹内,为了提供多用户同时上传,这里需要将在服务器上传客户端的文件操作放在另开启一个线程去运行。

完整代码:

view plain
import java.net.*;
import java.io.*;


/*
服务端将获取到的客户端封装到单独的线程中。
*/
class  JpgClient2
{
    public static void main(String[] args) throws Exception
    {
        //检验文件
        if(args.length==0)
        {
            System.out.println("指定一个jpg文件先!");
            return ;
        }
        File file = new File(args[0]);
        if(!(file.exists() && file.isFile() && file.getName().endsWith(".jpg")))
        {
            System.out.println("选择文件错误,请重新选择一个正确的文件。");
            return ;
        }

        //读取文件并写入到服务器中
        Socket s = new Socket("192.168.137.199",9006);
        FileInputStream fis = new FileInputStream(file);
        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);
        String str = new String(bufIn,0,num);
        System.out.println(str);

        fis.close();
        s.close();
    }
}


class JpgThread implements Runnable
{
    private Socket s;
    JpgThread(Socket s)
    {
        this.s = s;
    }
    public void run()
    {
        int count = 1;

        String ip = s.getInetAddress().getHostAddress();

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

            //指定文件存放路径将读取到客户提交的数据写入文件中
            File dir = new File("c:pic");
            File file = new File(dir,ip+"("+count+").jpg");
            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 (Exception e)
        {
            System.out.println(e.toString());
        }
    }
}
class  JpgServer2
{
    public static void main(String[] args)throws Exception
    {
        ServerSocket ss = new ServerSocket(9006);

        //开启线程并发访问
        while(true)
        {
            Socket s = ss.accept();
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip+"....connected");
            new Thread(new JpgThread(s)).start();
        }
    }
}

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730