白痴爱面包 发表于 2023-4-14 20:55:21

使用socket类出现的问题

代码
public class Serverx{
        public static void main(String args[]) throws IOException{
        //创建对象并绑定端口       
    ServerSocket ss = new ServerSocket(10000);
    //等待客户端连接
   
    Socket socket = ss.accept();
    //读取数据并保存到本地文件

    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    BufferedWriter bh = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://新建文件夹//xiao.txt"), "UTF-8"));
    String s = br.readLine();
    bh.write(s);
    bh.newLine();
    bh.flush();
    socket.close();
    ss.close();
}
}
出错
Exception in thread "main" java.lang.NullPointerException
    at java.io.Writer.write(Writer.java:157)
    at Serverx.main(Serverx.java:23)
出错的原因是啥

isdkz 发表于 2023-4-14 20:57:37

根据您提供的代码和异常信息,这个错误是因为java.lang.NullPointerException在Writer.write方法中发生。

这个问题很可能是由于从BufferedReader对象br中读取的String值s为null导致的。

在您的代码中,您使用了br.readLine()方法来读取客户端发送的数据。readLine()方法会返回一个包含一行数据的字符串,如果已到达输入流的末尾,则返回null。

因此,当客户端没有发送数据或者已经断开连接时,s变量可能为null。接下来,您尝试使用bh.write(s)方法将null值写入文件,这就导致了NullPointerException。

要解决这个问题,您可以在读取数据和写入文件之间添加一个检查,确保不会将null值写入文件。这里是修改后的代码:

public class Serverx {
    public static void main(String args[]) throws IOException {
      //创建对象并绑定端口      
      ServerSocket ss = new ServerSocket(10000);
      //等待客户端连接
      Socket socket = ss.accept();
      //读取数据并保存到本地文件
      BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      BufferedWriter bh = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://新建文件夹//xiao.txt"), "UTF-8"));
      
      String s;
      while ((s = br.readLine()) != null) {
            bh.write(s);
            bh.newLine();
            bh.flush();
      }
      
      socket.close();
      ss.close();
    }
}


现在,当从BufferedReader读取到null值时,循环会结束,不会尝试将null值写入文件。这样可以防止出现NullPointerException异常。

白痴爱面包 发表于 2023-4-14 21:04:14

isdkz 发表于 2023-4-14 20:57
根据您提供的代码和异常信息,这个错误是因为java.lang.NullPointerException在Writer.write方法中发生。
...

这是客户端的代码为什么新建的文件为空
public class Client{
        public static void main(String args[])throws IOException {
    //创建Socket对象,并连接服务器
    Socket socket = new Socket("127.0.0.1",10000);
    //读取本地文件的数据,并写到服务器中

    BufferedReader brd = new BufferedReader(new InputStreamReader(new FileInputStream("d://新建文件夹//xinyue.txt"), "UTF-8"));
    String s1 = brd.readLine();
    System.out.println(s1);
    BufferedWriter x = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
   
    x.write(s1);
    //往服务器写出结束标记
    socket.shutdownOutput();
    socket.close();
}
}

isdkz 发表于 2023-4-14 21:42:24

白痴爱面包 发表于 2023-4-14 21:04
这是客户端的代码为什么新建的文件为空
public class Client{
        public static void main(String args[] ...

我回复你的新帖子了,不好意思,刚刚家里突遭变故,停电了{:10_277:}

白痴爱面包 发表于 2023-4-14 21:48:48

isdkz 发表于 2023-4-14 21:42
我回复你的新帖子了,不好意思,刚刚家里突遭变故,停电了

你是我的神{:10_256:}

isdkz 发表于 2023-4-14 21:50:26

白痴爱面包 发表于 2023-4-14 21:48
你是我的神

不敢当不敢当{:5_109:}
页: [1]
查看完整版本: 使用socket类出现的问题