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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天下 中级黑马   /  2013-9-23 10:26  /  1719 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 天下 于 2013-9-23 10:46 编辑

浏览器可以解析任何数据,    我尝试着在代码中关联图片流对象,编译运行没问题,为什么浏览器一访问就报异常,程序结束请看一下这段代码:
//图片70.4kb,
  1. import java.net.*;
  2. import java.io.*;
  3. class TcpServerSocket
  4. {
  5.            public static void main(String[] args)throws Exception
  6.              {
  7.                     ServerSocket ss=new ServerSocket(10010);
  8.                     while(true){
  9.                          Socket s=ss.accept();
  10.                          OutputStream out=s.getOutputStream();
  11.                
  12.                
  13.                           System.out.println(s.getInetAddress().getHostAddress());
  14.                           PrintWriter pw=new PrintWriter(out,true);
  15.                        
  16.                          pw.println("欢迎访问我的服务器!");
  17.                        
  18. //建立图片读取流对象,并写入ServerSocket流中,图片70.4kb
  19.                          FileInputStream fis=new FileInputStream("1psu.jpg");
  20.                        byte[] buf=new byte[1024*1024];
  21.                        int len=0;
  22.                       while((len=fis.read(buf))!=-1)
  23.                         {
  24.                             out.write(buf,0,len);
  25.                          }
  26.                          pw.close();
  27.                         s.close();
  28.        
  29.                 }
  30.                
  31.            }
  32. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹秀云 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
楼主,饿刚看了下你的代码
第一:最好只适用一个输出流,你使用了两个 out 跟 pw,这样的话会出一个异常---> java.net.SocketException: Connection reset by peer: socket write error ,还有就是想客户端输出数据的时候最好只输出一次就行了,不要发了一次,然后又发一次,貌似也会出现上面那个异常 java.net.SocketException: Connection reset by peer: socket write error ,你的pw输出了一次,然后 out 又输出了一次, 还有就是你的 fis 没有关闭,东西还在内存里面,没有刷出去,下面是饿改过的代码,运行通过,并且浏览器可以看到图片---->
常出现的Connection reset by peer: 原因可能是多方面的,不过更常见的原因是:  
①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;  
②:客户关掉了浏览器,而服务器还在给客户端发送数据;  
③:浏览器端按了Stop  


package com.yting.tcp;

import java.net.*;
import java.io.*;

class TcpServerSocket {
        public static void main(String[] args) throws Exception {
                ServerSocket ss = new ServerSocket(12141);
                while (true) {
                        Socket s = ss.accept();
                        BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream());

                        System.out.println(s.getInetAddress().getHostAddress());
                        //PrintWriter pw = new PrintWriter(out, true);

                        //pw.println("欢迎访问我的服务器!");
                        //out.write(123456);

                        // 建立图片读取流对象,并写入ServerSocket流中,图片70.4kb
                        BufferedInputStream bis= new BufferedInputStream(new FileInputStream("刀剑神域.jpg"));
                        byte[] buf = new byte[1024];
                        int len = 0;
                        while ((len = bis.read(buf)) != -1) {
                                out.write(buf, 0, len);
                        }
                       
                        bis.close();
                        out.close();
                        //pw.close();
                        s.close();

                }

        }
}


至于出的那个异常,饿也不知道怎么搞、、、

The you smile until forever 、、、、、、、、、、、、、、、、、、、、、、

评分

参与人数 1技术分 +1 收起 理由
潘才新 + 1 赞一个!

查看全部评分

回复 使用道具 举报
yting_xmei1129 发表于 2013-9-23 11:53
楼主,饿刚看了下你的代码
第一:最好只适用一个输出流,你使用了两个 out 跟 pw,这样的话会出一个异常---> ...

那你的代码,浏览器访问到了图片数据吗?
回复 使用道具 举报
肯定访问到了啊!不然饿怎么敢发出去啊! - - !
回复 使用道具 举报
yting_xmei1129 发表于 2013-9-23 19:24
肯定访问到了啊!不然饿怎么敢发出去啊! - - !

怎么到我这又挂了,代码是将你的代码搬过来的
回复 使用道具 举报
不是吧?又挂了 ?你QQ多少,饿加你、、、
回复 使用道具 举报
天下 中级黑马 2013-9-23 21:05:32
7#
yting_xmei1129 发表于 2013-9-23 19:44
不是吧?又挂了 ?你QQ多少,饿加你、、、

QQ2524998616,,天下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马