黑马程序员技术交流社区

标题: 客户端和服务器端之间的图片上传问题 [打印本页]

作者: lpflpy    时间: 2013-5-7 09:39
标题: 客户端和服务器端之间的图片上传问题
本帖最后由 刘胜寒 于 2013-5-18 02:58 编辑

import java.io.*;
import java.net.*;
class PicClient
{
        public static void main(String[] args) throws Exception
        {
                 Socket s = new Socket("192.168.1.105",10009);
               
                //读取本地的图片数据
                 BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("LOGO.JPG")));
               
                //获取Socket的输出流
                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
               
                //将图片数据写入输出流中,并结束写入
                 String line = null;
                 while((line = bufr.readLine())!= null)
                 {
                         out.println(line);
                 }
                 s.shutdownOutput();
               
                //获取socket的输入流,读取服务端的反馈信息并打印
                 BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
                 String str =  bufin.readLine();
                 System.out.println(str);
                 //关闭资源
                 bufr.close();
                 s.close();
        }
}
class PicServer
{
        public static void main(String[] args)throws Exception
        {
                ServerSocket ss = new ServerSocket(10009);

                Socket s = ss.accept();

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

                System.out.println(ip+":"+"has been connected");
               
                //获取Socket流中的输入流,读取客户端写入的数据
            BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));

                PrintWriter out = new PrintWriter(new FileOutputStream("2.JPG"),true);
                 
                //读取socket流中的数据,并将之写入2.jpg文件,实现图片上传
                String line = null;
                while((line = bufin.readLine())!= null)
                {
                         out.println(line);
                }

                //给客户端反馈信息
                PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
            pw.println("文件上传成功");
                 
            //关闭资源
                out.close();
                s.close();
        }
}

图片上传成功,但是大小与原图不一样,不知道问题出在哪里了?求大神指教!
作者: 明天,你好    时间: 2013-5-11 23:04
因为读取的是图片,最好还是用字节流,不要用字符流,因为里面很容易出问题 ,而且毕老师视频中已经说过了 对于能看的见的文本用字符流,其余图片,视频什么的用字节流。所以你换成字节流,再试一试。
作者: 孙金鑫    时间: 2013-5-11 23:16
哥们,图片是字节流,不能用字符流来处理,下面我该的,你用时,改下ip地址,还有图片地址

  1. import java.io.*;
  2. import java.net.*;
  3. class PicClient
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                  Socket s = new Socket("192.168.0.102",10009);
  8.                
  9.                 //读取本地的图片数据
  10.                //  BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\1.jpg")));
  11.                                
  12.                                 FileInputStream fis = new FileInputStream("c:\\1.jpg");
  13.                
  14.                 //获取Socket的输出流
  15.                 // PrintWriter out = new PrintWriter(s.getOutputStream(),true);

  16.                                 OutputStream out = s.getOutputStream();
  17.                
  18.             

  19.                                 byte[] buf = new byte[1024];
  20.                                 int len = 0;
  21.                                 while((len = fis.read(buf))!=-1)
  22.                                 {
  23.                                         out.write(buf,0,len);
  24.                                 }
  25.                                 s.shutdownOutput();
  26.                
  27.                 //获取socket的输入流,读取服务端的反馈信息并打印
  28.                  BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
  29.                  String str =  bufin.readLine();
  30.                  System.out.println(str);
  31.                  //关闭资源
  32.                  fis.close();
  33.                  s.close();
  34.         }
  35. }
  36. class PicServer
  37. {
  38.         public static void main(String[] args)throws Exception
  39.         {
  40.                 ServerSocket ss = new ServerSocket(10009);

  41.                 Socket s = ss.accept();

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

  43.                 System.out.println(ip+":"+"has been connected");
  44.                
  45.                
  46.                          InputStream bufin = s.getInputStream();

  47.             
  48.                          OutputStream out = new FileOutputStream("c:\\2.jpg");
  49.                  
  50.               
  51.                 byte[] buf = new byte[1024];
  52.                                 int len = 0;
  53.                 while((len = bufin.read(buf))!= -1)
  54.                 {
  55.                          out.write(buf,0,len);
  56.                 }

  57.                 //给客户端反馈信息
  58.                 PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
  59.                            pw.println("文件上传成功");
  60.                  
  61.             //关闭资源
  62.                 out.close();
  63.                 s.close();
  64.         }
  65. }
复制代码

作者: 刘胜寒    时间: 2013-5-13 09:02
注意结贴。。。查看你们的帖子真的很耗时时间。。真心希望你们及时结贴。。真的很累。。
谢谢合作
作者: lpflpy    时间: 2013-5-21 13:34
刘胜寒 发表于 2013-5-13 09:02
注意结贴。。。查看你们的帖子真的很耗时时间。。真心希望你们及时结贴。。真的很累。。
谢谢合作 ...

好的,明白




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2