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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦桂胜 中级黑马   /  2013-11-14 19:39  /  1238 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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


  4. class UploadFileClient {

  5.         /**
  6.          * @param args
  7.          * @throws Exception
  8.          */
  9.         public static void main(String[] args) throws Exception {
  10.                 // TODO Auto-generated method stub
  11.                 Socket s=new Socket("127.0.0.1",10006);
  12.                 OutputStream out=s.getOutputStream();
  13.                 FileInputStream  fis=new FileInputStream("a.txt");
  14.                 byte[] buf=new byte[1024];
  15.                 int len=0;
  16.                 while((len=fis.read(buf))!=-1){
  17.                         out.write(buf, 0, len);
  18.                 }
  19.                 System.out.println("hehe ");
  20.                
  21.                 s.close();

  22.         }
  23.        

  24. }
  25. class UploadFileServer{
  26.          public static void main(String[] args) throws Exception {
  27.                         // TODO Auto-generated method stub
  28.                         ServerSocket ss=new ServerSocket(10006);
  29.                         FileOutputStream fos=new FileOutputStream("b.txt");
  30.                         while(true){
  31.                                 Socket s=ss.accept();
  32.                                 InputStream in=s.getInputStream();
  33.                                 byte[] buf=new byte[1024];
  34.                                 int len=0;
  35.                                 while((len=in.read(buf))!=-1){
  36.                                         fos.write(buf, 0, len);
  37.                                 }
  38.                                 ss.close();
  39.                         }
  40.                        
  41.                        

  42.                 }
  43. }


复制代码
上传成功但是报了异常

H7~}WO(]GMJ3F(NBZ9H3UF3.jpg (12.32 KB, 下载次数: 9)

H7~}WO(]GMJ3F(NBZ9H3UF3.jpg

评分

参与人数 1技术分 +1 黑马币 +2 收起 理由
To + 1 + 2 很给力!

查看全部评分

5 个回复

倒序浏览
  1. ServerSocket ss=new ServerSocket(10006);
  2.                         FileOutputStream fos=new FileOutputStream("b.txt");
  3.                         Socket s=ss.accept();//把这一行放出while循环就可以了
  4.                         while(true){
  5.                                 InputStream in=s.getInputStream();
  6.                                 byte[] buf=new byte[1024];
  7.                                 int len=0;
  8.                                 while((len=in.read(buf))!=-1){
  9.                                         fos.write(buf, 0, len);
  10.                                 }
  11.                                 ss.close();
  12.                         }
  13.                        
  14.                        

  15.                 }
复制代码

评分

参与人数 1黑马币 +2 收起 理由
To + 2 多加点自己的理解啊

查看全部评分

回复 使用道具 举报

这个方法不行呀
回复 使用道具 举报

我运行过了,不会报错,把a.txt 文件上传到服务端bao保存到b.txt,我的可以
回复 使用道具 举报
本帖最后由 cuilitang 于 2013-11-14 22:59 编辑
  1. package cn.itcast;

  2. import java.io.FileOutputStream;
  3. import java.io.InputStream;
  4. import java.net.ServerSocket;
  5. import java.net.Socket;

  6. public class UploadFileServer{
  7.     public static void main(String[] args) throws Exception {
  8.            
  9.                    ServerSocket ss=new ServerSocket(10006);
  10.                    FileOutputStream fos=new FileOutputStream("b.txt");
  11.                   
  12.                     while(true){
  13.                             Socket s=ss.accept();
  14.                            InputStream in=s.getInputStream();
  15.                            byte[] buf=new byte[1024];
  16.                            int len=0;
  17.                            while((len=in.read(buf))!=-1){
  18.                                    fos.write(buf, 0, len);
  19.                            }
  20.                         //   ss.close();
  21.                    }
  22.                   
  23.                   

  24.            }
  25. }

  26. /**直接把ss.close()那一句注掉就可以了

  27. //你吧serverSocket关掉之后这个对象就没了,serversoket不在循环中,也没有创建新的serversocket对象,调用 acceppt()方法当然报异常了。

  28. //ss.accept()那句放到外面,那么accept()方法接收完一次客户端的连接后便已经不再阻塞等待客户新的连接了,上传新的文件会报连接拒绝

  29. //综上所述,accept必须放进循环中,等待客户新的连接,这样才能保证服务器保持等待连接状态,等待客户端上传的新的文件。
  30. 至于为啥你要在循环中关掉ServerSocket对象,建议你看一下基础知识中while的执行流程,好好想想服务器为啥能继续等待新的连接,而不是接受完就退出。

  31. //验证:你若是吧整个方法体都放进while循环中,不注掉close(),一句程序也正常继续接受客户端连接,因为每次都会new 新的ServerSocket对象 。
  32. *
  33. */

复制代码

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报

//ss.accept()那句放到外面,那么accept()方法接收完一次客户端的连接后便已经不再阻塞等待客户新的连接了,上传新的文件会报连接拒绝
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马