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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nc11111 中级黑马   /  2016-4-13 22:45  /  3327 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
package temc03;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;

public class Demo2Socket {

        public static void main(String[] args) throws IOException {
                ServerSocket ss = new ServerSocket(2222);// 服务端
                Socket socket = ss.accept();// 接受客户端的套接字
                FileOutputStream o = new FileOutputStream("G:\\2"+System.currentTimeMillis()+".jpg");
                InputStream i=socket.getInputStream();
                byte[] b = new byte[1024];
                int len;
                while ((len = i.read(b)) != -1) {
                         // 输出流
                         o.write(b, 0, len);
                         System.out.println(Arrays.toString(b));
                }
                o.close();
                // 告知客户端接受完毕
                OutputStream i2 = socket.getOutputStream();
                i2.write("接受完毕".getBytes());
                ss.close();
     }
}



package temc03;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class DomeSocket {
        public static void main(String[] args) throws IOException, IOException  {

                // 客户端
                Socket s = new Socket("127.0.0.1", 2222);
                OutputStream socketoutputstream = s.getOutputStream();
                FileInputStream is = new FileInputStream("G:\\1.jpg");// 输入流
                byte[] b = new byte[1024];
                int len;
                while ((len = is.read(b)) != -1) {
                        // 输出流
                        socketoutputstream.write(b, 0, len);
                        socketoutputstream.flush();
                }
                is.close();
                // 告知服务器传送完毕
                s.shutdownOutput();
                // 接受服务器相应
                InputStream i2 = s.getInputStream();
                int leng;
                byte[] b1 = new byte[1024];
                while ((leng = i2.read(b1)) != -1) {
                        // 输出流+sys
                        System.out.println("==========");
                        System.out.println(new String(b1, 0, leng));
                }
                i2.close();
        }
}

==========
接受完毕
Exception in thread "main" java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:196)
        at java.net.SocketInputStream.read(SocketInputStream.java:122)
        at java.net.SocketInputStream.read(SocketInputStream.java:108)
        at temc03.DomeSocket.main(DomeSocket.java:30)


打印结果老是出错,怎么解决?请指教

最佳答案

查看完整内容

我测试你的代码,一样的问题,后来我把 Demo2Socket (也就是服务端)最后先关闭socket,再关闭Serversocket客户端就不在报错了 OutputStream i2 = socket.getOutputStream(); i2.write("接受完毕".getBytes()); socket.close(); ss.close(); }

4 个回复

倒序浏览
我测试你的代码,一样的问题,后来我把 Demo2Socket (也就是服务端)最后先关闭socket,再关闭Serversocket客户端就不在报错了     
OutputStream i2 = socket.getOutputStream();
          i2.write("接受完毕".getBytes());
          socket.close();
          ss.close();
}
回复 使用道具 举报
为什么要关客户端呢,一般客户端都是不关的
回复 使用道具 举报
D也是内部类啊,怎么不用它呢?
回复 使用道具 举报
服务器不是循环操作,写一次的情况应该关闭吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马