涂不完的改 2021-08-10 00:23 采纳率: 0%
浏览 61

Exception in thread "main" java.net.SocketException: Connection reset, dis.readUTF()方法报错删掉后可以运行


package com.example.test3;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class TestClient {//客户端
    public static void main(String[] args) throws IOException {
        System.out.println("客户端启动");
        //1.创建Socket,用来发送请求的,指定服务器端的IP和端口号
        Socket s = new Socket("localhost",8888);
        //录入账号密码
        Scanner sc = new Scanner(System.in);
        System.out.print("请录入账号:");
        String username = sc.next();
        System.out.print("请输入密码:");
        String password = sc.next();
        //将账号密码封装成为User对象
        User user = new User(username, password);
        //2.对于客户端来说,我们直观的感受是用流来发送数据
        OutputStream os = s.getOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(os);
        oos.writeObject(user);
        //接收服务器端数据
        s.shutdownOutput();
        InputStream is = s.getInputStream();
        DataInputStream dis = new DataInputStream(is);
        System.out.println("登录结果:"+dis.readUTF());
        System.out.println("222");
        //关闭流,关闭套接字资源
        dis.close();
        is.close();
        oos.close();
        os.close();
        s.close();
    }
}

把上面那个dis.readUTF()删掉后可以运行,调用其他方法也可以输出222,read方法就报错

package com.example.test3;

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

public class TestServer {//服务器端

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        System.out.println("服务器端启动");
        //1.创建一个套接字,指定本侧的端口号
        ServerSocket ss = new ServerSocket(8888);
        //2.通过ServerSocket的accept方法获取服务器端的套接字
        Socket s = ss.accept();
        //3.对于服务器端来说,我们用流接收数据
        InputStream is = s.getInputStream();
        ObjectInputStream ois = new ObjectInputStream(is);
        User user = (User)(ois.readObject());
        //进行校验
        String str = null;
        if (user.getUsername().equals("root")&&user.getPassword().equals("123123")){
            str = "登录成功";
        }else {
            str = "登录失败";
        }
        //服务器对客户端的响应
        s.shutdownInput();
        OutputStream os = s.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        dos.writeUTF(str);
        //4.关闭流,关闭网络资源
        dos.close();
        os.close();
        ois.close();
        is.close();
        s.close();
        ss.close();
    }
}


  • 写回答

1条回答 默认 最新

  • 关注

    把要发送的数据封装到JavaBean里面,直接发送JavaBean,接收也一样,转换为JavaBean,JavaBean要实现系列化接口。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月10日

悬赏问题

  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 MATLAB四叉树处理长方形tif文件
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 使用Java milo连接Kepserver服务端报错?
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?
  • ¥20 软件开发方法学习来了