[java新手] IO和网络编程的问题 5C

做网络编程的练习,用socket连接 传输文件,目的是把一个文件传到服务端保存下来
测试结果完全正常,文件也传输完成,但是catch捕捉到了异常???!
当运行服务端时候客户端catch报错,当运行客户端时候服务端catch报错 0.0
代码如下

修改了下代码,我把输出换成e.printStackTrace()打印了,还是这样 结果是实现了的,测试通过,但是有捕获到异常



import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import org.junit.Test;

public class 网络编程_上传 {
    public static String ClientInteAddress = "127.0.0.1";
    public static String str = "9000";
    public static String ServerFileAddress = "E:\\111.xls";
    public static String ClientFileAddress = "D:\\15916\\下载\\111.xls";

    @Test//服务器
    public void server() {
        ServerSocket sss = null;
        Socket sk = null;
        InputStream is = null;
        BufferedInputStream bis = null;
        FileOutputStream fos = null;

        try {
            sss = new ServerSocket(new Integer(str));
            sk = sss.accept();
            is = sk.getInputStream();
            bis = new BufferedInputStream(is);
            fos = new FileOutputStream(ServerFileAddress);

            int buffi = 0;
            byte [] by = new byte[1024];

            while ((buffi = bis.read(by)) != -1) {
                fos.write(by);
            }

            fos.close();
            bis.close();
            sk.close();
            sss.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
                try {
                    if (fos != null) {fos.close();}
                    if (bis != null) bis.close();
                    if (sk != null) sk.close();
                    if (sss != null) sss.close();
                } catch (IOException e) {
                    System.out.println("服务器报错啦!:关闭流出错");
                }
            }

    }

    @Test//客户端
    public void client() {
        Socket sk = null;
        OutputStream os = null;
        BufferedOutputStream bos = null;
        FileInputStream fis = null;

        try {
            sk = new Socket(InetAddress.getByName(ClientInteAddress), new Integer(str));
            os = sk.getOutputStream();
            bos = new BufferedOutputStream(os);
            fis = new FileInputStream(ClientFileAddress);

            int buffi = 0;
            byte [] by = new byte[1024];
            while ((buffi = fis.read(by)) != -1) {
                bos.write(by);
            }

            fis.close();
            bos.close();
            sk.close();
        } catch (NumberFormatException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (sk != null) sk.close();
                if (fis != null) fis.close();
                if (bos != null) bos.close();

            } catch (IOException e) {
                System.out.println("客户端报错啦!:关闭流出错");
            }
        }

    }

}

8个回答

看下端口有没有占用,或者防火墙有没有禁止这个端口。

qq_36660589
凝__ 没有啊,我测试前特意查了端口占用的,而且换端口也没用。更过分的是文件传输是实现了的,就是莫名其妙有捕获到异常
一年多之前 回复

System.out.println(e);

输出下具体什么错误。

qq_36660589
凝__ 不增加NumberFormatException捕获,都运行时候没有报错
一年多之前 回复
qq_36660589
凝__ 都运行,客户端catch增加了NumberFormatException捕获,运行有BindException 绑定错误
一年多之前 回复
qq_36660589
凝__ 只运行服务器时:java.net.ConnectException 链接异常
一年多之前 回复

那个捕捉的IO异常怎么来的,我不清楚。而且在我把catch内容换为输出之前,报错有:JVM绑定错误(socket赋值行) 连接错误

程序写的没问题。 但是那个端口在我的环境下有问题,我换成了9000端口,测试通过。建议更改端口测试一下,如果有问题M我

qq_41853212
qq_41853212 和他们说多不差我的想法
一年多之前 回复
qq_36660589
凝__ 结果是实现了的,文件完整的传输了,就是有捕获异常。
一年多之前 回复
qq_36660589
凝__ 呐,我试了换成9000还是报错,我又把catch里的异常处理换成打印异常了 有ConnectException 链接异常,客户端catch增加了NumberFormatException捕获,运行有BindException 绑定错误。。很迷
一年多之前 回复

1.首先不要怕报错,报错是找出问题的关键
2.看看你报的是什么错
3.然后根据相应的错误排查问题
4.你这里socketServer接收,可以开一个线程,单独处理下载文件的任务,这样可以确定错误来自处理下载流这一部分还是socketServer这里有问题。

try to close the write stream first and set the reference to null just in case,
bos.close();
bos=null;
fis.close();
fix=null;
sk.close();
sk = null;
Same here,
if (bos != null) bos.close();
if (fis != null) fis.close();
if (sk != null) sk.close();

包名类名全英文建议,试试

不要用中文定义类,容易出现不能解决的问题,请认真对待java

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

6
java读文件报错,没招了,快过来看看,就是普通的用FileInputStream读的时候就报这个
2
java.io.OptionalDataException
3
java中用DataInputStream读取数据的是后老是出现这样的问题?怎么解决?
4
如何使用Java.io的io流读取全部数据和一行数据和某列数据(这些数据不能出现乱码)
8
Java网络编程,代码正确,控制台不显示接收的结果,但调试模式下又显示,请热心人帮忙解答,谢谢。
13
[java]为什么我IO读写文件的速度逐渐变慢,刚开始特别快
4
java.io.IOException: End of IO Stream Read
1
Java scanner file 报错的问题
1
Unhandled exception: java.io.UnsupportedEncodingException Android项目字符集问题
3
java.io.IOException: stream does not represent a PKCS12 key store
1
手机端请求后台下载更新,出现错误java.io.IOException: 远程主机强迫关闭了一个现有的连接。
1
Error querying database. Cause: java.lang.NullPointerException
3
使用HttpClient时遇到的 java.net.SocketException: Socket closed异常
3
java.io.StreamCorruptedException: invalid stream header: 77327070是什么情况如何解决?
4
JAVA后端调用http Post请求,url后面拼接参数报错
3
java.io.FileNotFoundException: NUL: (系统找不到指定的文件。)
5
java怎么从for语句中获取返回值,我第一个方法中返回了lines可是 打印的时候只打印了[]
2
java怎么从循环中提取return 值 ,importdata中的return的值是null,但是想要return lines 的内容
1
java 怎样将importData的值加入容器中
1
fwrite的对io的影响有什么?什么能影响io?