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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨浩 于 2013-1-28 16:38 编辑
  1. package tcpdemo;

  2. import java.io.IOException;
  3. import java.net.*;

  4. public class UploadPicServer {
  5.         public static void main(String[] args) throws IOException {
  6.                 ServerSocket ss = new ServerSocket(10001);
  7.                 while(true){
  8.                         Socket s = ss.accept();
  9.                         new Thread(new UploadTask(s)).start();
  10.                 }
  11.                 //ss.close();
  12.         }
  13. }
复制代码
  1. package tcpdemo;

  2. import java.io.*;
  3. import java.net.*;

  4. public class UploadTask implements Runnable {
  5.         private Socket s;
  6.         public UploadTask(Socket s){
  7.                 this.s = s;
  8.         }
  9.         public void run(){
  10.                 int count = 0;
  11.                 String ip = s.getInetAddress().getHostAddress();
  12.                 try{
  13.                         InputStream in = s.getInputStream();
  14.                         File dir = new File("png");
  15.                         if(!(dir.exists())){
  16.                                 dir.mkdirs();
  17.                         }
  18.                         File file = new File(dir,ip+".png");
  19.                         while(file.exists()){
  20.                                 file = new File(dir,ip+"("+(++count)+").png");
  21.                         }
  22.                         FileOutputStream fops = new FileOutputStream(file);
  23.                         byte[] buf = new byte[1024];
  24.                         int len = 0;
  25.                         while ((len=in.read(buf))!=-1){
  26.                                 fops.write(buf, 0, len);
  27.                         }
  28.                         OutputStream out = s.getOutputStream();
  29.                         out.write("传输完毕!".getBytes());
  30.                         fops.close();
  31.                         s.close();
  32.                 }catch(Exception e){
  33.                         System.out.println("ERROR!");
  34.                 }
  35.         }

  36. }
复制代码
  1. package tcpdemo;

  2. import java.io.*;
  3. import java.net.*;

  4. public class UploadPicClient {
  5.         public static void main(String[] args) throws Exception {
  6.                 Socket s = new Socket("192.168.0.100",10001);
  7.                 InputStream in = s.getInputStream();
  8.                 OutputStream out = s.getOutputStream();
  9.                 File file = new File("1.png");
  10.                 FileInputStream fins = new FileInputStream(file);
  11.                 byte[] buf = new byte[1024];
  12.                 int len = 0;
  13.                 while((len=fins.read(buf))!=-1){
  14.                         out.write(buf, 0, buf.length);
  15.                 }
  16.                 s.shutdownOutput();
  17.                 byte[] bufin = new byte[1024];
  18.                 in.read(bufin);
  19.                 System.out.println(new String(bufin,0,bufin.length));
  20.                 fins.close();
  21.                 s.close();
  22.         }

  23. }
复制代码
服务端接收到的图片,大小会变化,而如果把服务端接收到的图片当作源的话,那么就一样大了...
难道是因为文件末尾多了字符么?

2 个回复

倒序浏览
这么几天了,也没人解答,后来自己找到错误地方了。
是写入的时候,当作缓冲区的数组,输出的时候,参数不能写成buf.length,而应该是len
错误的地方在第三个文件的第16行
回复 使用道具 举报
原来是输出的时候参数用错了,那实际寸的图片大小是没错的。 我刚刚开始学java,先来跟您学习了。
我觉得处理图片方面还是一个很复杂的知识
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马