A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天之饺子 中级黑马   /  2015-6-25 12:18  /  402 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

额  第一次发帖 如果有什么格式问题 还请谅解啊。。
如题  我在上基础课时照着编程的程序 传输图片的时候 生成的图片有误。
程序编译通过 能运行 就是结果有问题。
程序如下


import java.io.*;
import java.net.*;

class PicClient
{
        public static void main(String[] args) throws Exception
        {       
                if (args.length!=1)
                {
                        System.out.println("请选择一个jpg格式的图片");
                        return;
                }

                File file = new File(args[0]);

                if(!(file.exists() && file.isFile()))
                {
                        System.out.println("该文件有问题");
                        return;
                }
                if (!(file.getName().endsWith(".jpg")))
                {
                        System.out.println("该文件格式错误");
                        return;
                }
                if (file.length()>1024*1024*5)
                {
                        System.out.println("该文件太大");
                        return;
                }


                Socket s = new Socket("192.168.1.103",10010);//

                FileInputStream fis = new FileInputStream(file);
               
                OutputStream out = s.getOutputStream();

                byte[] buf = new byte[1024];

                int len = 0;

                while ((len=fis.read())!=-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();

        }
}

//定义线程
class PicThread implements Runnable
{
        private Socket s;
        PicThread(Socket s)
        {
                this.s = s;
        }
        public void run()
        {
                String ip = s.getInetAddress().getHostAddress();
                try
                {
                        int count = 1;
                        System.out.println("ip::"+ip+"..is connected..");

                        InputStream in = s.getInputStream();

                        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(10010);
               
                while (true)
                {
                        Socket s = ss.accept();

                        new Thread(new PicThread(s)).start();
                }

                //ss.close();
        }
}

评分

参与人数 1黑马币 +6 收起 理由
夕颜 + 6 很给力!

查看全部评分

3 个回复

倒序浏览
啊~学习学习
回复 使用道具 举报
while ((len=fis.read())!=-1)
                {
                        out.write(buf,0,len);
                }
                //告诉服务端数据已写完
                s.shutdownOutput();
这里的read里缺少参数buf
回复 使用道具 举报
额 行了  谢谢了  开始的时候下面服务端也少了  我给加了上去  上面客户端的给忘记了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马