黑马程序员技术交流社区

标题: 我写的文件上传代码,但是出现了错误 [打印本页]

作者: Mr.Z.Lee    时间: 2013-11-6 19:03
标题: 我写的文件上传代码,但是出现了错误
  1. package com.itheima;

  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.InetAddress;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;

  8. import java.io.*;  
  9. import java.net.*;  
  10. //客户端  
  11. class UpLoadText{  


  12.         public void main(String[] args) throws Exception {  
  13.                 System.out.println("fffffffff");
  14.                  Socket s = null;
  15.       s = new Socket("localhost",8000);  
  16.         BufferedReader bufr = new BufferedReader(new FileReader("Test9.java"));  
  17.         PrintWriter out = new PrintWriter(s.getOutputStream(),true);  
  18.          
  19.         String line = null;  
  20.         while((line=bufr.readLine())!=null){  
  21.             out.println(line);  
  22.         }  
  23.         s.shutdownOutput();//禁用客户端的输出流,相当于给流中加入结束标记-1。  
  24.         BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));  
  25.         String str = bufIn.readLine();  
  26.         System.out.println(str);  
  27.         bufr.close();  
  28.         s.close();  
  29.     }  
  30. }  
  31. //服务端  
  32. class Test9{  
  33.     public static void main(String[] args) throws Exception {
  34.         new UpLoadText().main(args);
  35.         ServerSocket ss = new ServerSocket(8000);
  36.         Socket s = ss.accept();  
  37.         String ip = s.getInetAddress().getHostAddress();  
  38.         System.out.println("来自IP:"+ip);  
  39.            
  40.         BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));  
  41.         PrintWriter out = new PrintWriter(new FileWriter("Test9_i.java"),true);  
  42.          
  43.         String line = null;  
  44.         while((line=bufIn.readLine())!=null){  
  45.             if("over".equals(line))  
  46.                 break;  
  47.             out.println(line);  
  48.         }  
  49.         PrintWriter pw = new PrintWriter(s.getOutputStream(),true);  
  50.         pw.println("上传成功");//给客户端发送提示信息。  
  51.         out.close();  
  52.         s.close();  
  53.         ss.close();  
  54.       
  55.     }  
  56. }  
复制代码

作者: The_Wizard    时间: 2013-11-6 20:08
哥们,你这样写,方式上比我的更好一些。参考一下毕向东老师讲解的  多个客户端上传图片 。通过线程来解决。你的想法估计跟这种方式一样,但你代码写的不对。至少你得开启两个线程,而且得先运行服务器。我自己的代码你先参考下。
class TextClient {
        public static void main(String[] args) throws Exception {
                InetAddress i = InetAddress.getLocalHost();
                Socket s = new Socket(i, 10006);
               
                File file = new File("src\\com\\itheima\\Test7.java");
                BufferedReader br = new BufferedReader(new FileReader(file));

                PrintWriter out = new PrintWriter(s.getOutputStream(), true);
               
                String fileName = file.getName();
                out.println(fileName);
                String line = null;
                while ((line = br.readLine()) != null) {
                        out.println(line);
                }

                s.shutdownOutput();

                BufferedReader bufIn = new BufferedReader(new InputStreamReader(
                                s.getInputStream()));
                String str = bufIn.readLine();
                System.out.println(str);

                br.close();
                s.close();
        }
}

class TextServer {
        public static void main(String[] args) throws Exception {
                ServerSocket ss = new ServerSocket(10006);
                Socket s = ss.accept();

                BufferedReader bufIn = new BufferedReader(new InputStreamReader(
                                s.getInputStream()));
               
                String fileName = bufIn.readLine();
                PrintWriter out = new PrintWriter(new FileWriter(fileName), true);

                String line = null;
                while ((line = bufIn.readLine()) != null) {
                        out.println(line);
                }

                PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
                pw.println("上传成功");

                out.close();
                s.close();
                ss.close();
        }
}
作者: ~﹏~    时间: 2013-11-6 20:24
将这个:
  1. BufferedReader bufr = new BufferedReader(new FileReader("Test9.java"));  
  2.         PrintWriter out = new PrintWriter(s.getOutputStream(),true);  
  3.          
  4.         String line = null;  
  5.         while((line=bufr.readLine())!=null){  
  6.             out.println(line);  
  7.         }  
复制代码
改为这个:
  1. BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
  2.                         BufferedOutputStream bos=new BufferedOutputStream(this.os);
  3.                         byte[] bytes=new byte[1];
  4.                        
  5.                                 while(bis.read(bytes)!=-1)
  6.                                 {
  7.                                         bos.write(bytes);
  8.                                 }
  9.                                 bis.close();
  10.                                 bos.close();
复制代码





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