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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 忄雾飞扬 中级黑马   /  2013-10-29 19:34  /  2190 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 忄雾飞扬 于 2013-10-30 13:00 编辑

总是发生这个异常;Exception in thread "main" java.net.SocketException: Software caused connection
abort: socket write error
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
        at JpgClient.main(JpgThread.java:82)
我用System.out.println("java").的方法来排除,只找到可能 是存储地址错误,找不到解决办法,求解!!

、、

import java.io.*;
import java.net.*;
class PicCopy implements Runnable
{
        private Socket s;
        PicCopy(Socket s){
                this.s = s;        
        }
        public void run(){
                int count = 0;
                String ip = s.getInetAddress().getHostAddress();
                try{
                        
                        InputStream in = s.getInputStream();
                        File dir =  new File("f:\\myjava\day23");

                        File file = new File(dir,ip+"("+(count)+")"+".jpg");

                        while(file.exists())
                                file = new File(dir,ip+"("+(count++)+")"+".jpg");
                        FileOutputStream fis = new FileOutputStream(file);
                        byte[] b = new byte[1024];
                        int len = 0;
                        while((len = in.read(b))!=-1){
                                fis.write(b,0,len);
                                
                        }
                        OutputStream out = s.getOutputStream();
                        out.write("图片上传成功".getBytes());
                        fis.close();
                        s.close();
                }
                catch(Exception e){
                        throw new RuntimeException("图片上传失败");
                }
                finally{try
                {
                        s.close();
                }
                catch (Exception ee)
                {
                        throw new RuntimeException("jay");
                }}
        }
}
class JpgClient
{
        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("169.254.141.190",10008);
                FileInputStream fis = new FileInputStream(file);
                OutputStream out = s.getOutputStream();
                System.out.println("java");
                byte[] b = new byte[fis.available()];
                int len = 0;
                while((len = fis.read(b))!= -1){
                        out.write(b,0,len);
                }
                s.shutdownOutput();
        
                InputStream in = s.getInputStream();

                byte[] bu= new byte[1024];
                int i = 0;
                while((i= in.read(bu))!=-1)
                        System.out.println(new String(bu,0,i));               
                fis.close();
                s.close();

        }
}
class JpgServer
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss = new ServerSocket(10008);
                while(true){
                                Socket s = ss.accept();
                        new Thread(new PicCopy(s)).start();
                }
               
        }
}


评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

14 个回复

倒序浏览
我调试了一下成功了,问题我标注出来了,请看一下代码,你试试看:


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

  3. class PicCopy implements Runnable {
  4.         private Socket s;

  5.         PicCopy(Socket s) {
  6.                 this.s = s;
  7.         }

  8.         public void run(){
  9.                 int count = 0;
  10.                 String ip = s.getInetAddress().getHostAddress();
  11.                 System.out.println(ip+".......connected");
  12.                 try{  
  13.                         InputStream in = s.getInputStream();

  14.                         //你的问题在于这个目录不存在,你或者自己在windows下提前创建好,或者判断一下,不存在则创建
  15.                         File dir =  new File("f:\\myjava\\day23");
  16.                         if (!dir.exists())
  17.                                 dir.mkdirs();

  18.                         File file = new File(dir,ip+"("+(count)+")"+".jpg");

  19.                         while(file.exists())
  20.                                 file = new File(dir,ip+"("+(count++)+")"+".jpg");
  21.                         FileOutputStream fis = new FileOutputStream(file);
  22.                         byte[] b = new byte[1024];
  23.                         int len = 0;
  24.                         while((len = in.read(b))!=-1){
  25.                                 fis.write(b,0,len);        
  26.                         }
  27.                         //System.out.println("aaaaa");
  28.                         OutputStream out = s.getOutputStream();
  29.                         out.write("图片上传成功".getBytes());
  30.                         fis.close();
  31.                         s.close();
  32.      }
  33.      catch(Exception e){
  34.              throw new RuntimeException("图片上传失败");
  35.      }
  36.      finally{
  37.              try{
  38.                      s.close();
  39.              }
  40.              catch (Exception ee){
  41.                      throw new RuntimeException("jay");
  42.              }
  43.      }
  44.    }
  45. }

  46. class JpgClient {
  47.         public static void main(String[] args) throws Exception {
  48.                 if (args.length != 1) {
  49.                         System.out.println("请选择一个jpg格式的图片");
  50.                         return;
  51.                 }
  52.                 File file = new File(args[0]);

  53.                 //System.out.println(file.getPath());
  54.                 if (!(file.exists() && file.isFile())) {
  55.                         System.out.println("该文件有问题");
  56.                         return;

  57.                 }

  58.                 if (!file.getName().endsWith(".jpg")) {
  59.                         System.out.println("图片格式错误,请重新选择");
  60.                         return;
  61.                 }

  62.                 if (file.length() > 1024 * 1024 * 5) {
  63.                         System.out.println("文件过大");
  64.                         return;
  65.                 }

  66.                 Socket s = new Socket("192.168.1.105", 10008);
  67.                 FileInputStream fis = new FileInputStream(file);
  68.                 OutputStream out = s.getOutputStream();
  69.                 //System.out.println("java");
  70.                 byte[] b = new byte[fis.available()];
  71.                 int len = 0;
  72.                 while ((len = fis.read(b)) != -1) {
  73.                         //System.out.println("aaaa");
  74.                         out.write(b, 0, len);
  75.                 }
  76.                 s.shutdownOutput();

  77.                 InputStream in = s.getInputStream();

  78.                 byte[] bu = new byte[1024];
  79.                 int i = 0;
  80.                 while ((i = in.read(bu)) != -1)
  81.                         System.out.println(new String(bu, 0, i));
  82.                 fis.close();
  83.                 s.close();

  84.         }
  85. }

  86. class JpgServer {
  87.         public static void main(String[] args) throws Exception {
  88.                 ServerSocket ss = new ServerSocket(10008);
  89.                 while (true) {
  90.                         Socket s = ss.accept();
  91.                         new Thread(new PicCopy(s)).start();
  92.                 }

  93.         }
  94. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
wenbaoxing 发表于 2013-10-29 21:29
我调试了一下成功了,问题我标注出来了,请看一下代码,你试试看:

Exception in thread "main" java.net.ConnectException: Connection timed out: conn
ect
        at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.ja
va:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocket
Impl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java
:182)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at java.net.Socket.connect(Socket.java:528)
        at java.net.Socket.<init>(Socket.java:425)
        at java.net.Socket.<init>(Socket.java:208)
        at JpgClient.main(abc.java:80)

F:\abc\day24>//还是不行,控制台出现上面这个提示
回复 使用道具 举报
To 金牌黑马 2013-10-30 00:08:49
板凳
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报

回帖奖励 +10

忄雾飞扬 发表于 2013-10-29 23:38
Exception in thread "main" java.net.ConnectException: Connection timed out: conn
ect
        at ja ...

请问,你是把我的代码复制一下,运行的吗?
回复 使用道具 举报
wenbaoxing 发表于 2013-10-30 00:51
请问,你是把我的代码复制一下,运行的吗?

是的呀
回复 使用道具 举报

把你所有的.class文件都删除了,重新编译试试,再不行,我也没招了
回复 使用道具 举报
wenbaoxing 发表于 2013-10-30 11:48
把你所有的.class文件都删除了,重新编译试试,再不行,我也没招了

谢谢——wenbaoxing了,这个 代码在我机子上一直阻塞状态,不知道哪错了,重写了一人代码可以成功运行了,这个就不行,无语死
回复 使用道具 举报

回帖奖励 +10

学习一下:)
回复 使用道具 举报
我感觉差距好大!!有压力啊有压力!
回复 使用道具 举报
我是来学习一下的
回复 使用道具 举报
冲着黑马币来的。。。{:3_55:}
回复 使用道具 举报
:lol。。。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报

回帖奖励 +10

30~~~~~~~~~~~~~~~~~~~~~~~~
回复 使用道具 举报
虽然不知道怎么回事,但也得顶
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马