鱼C论坛

 找回密码
 立即注册
查看: 552|回复: 5

[已解决]使用socket类出现的问题

[复制链接]
发表于 2023-4-14 20:55:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码
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)
出错的原因是啥
最佳答案
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值写入文件。这里是修改后的代码:

  1. public class Serverx {
  2.     public static void main(String args[]) throws IOException {
  3.         //创建对象并绑定端口      
  4.         ServerSocket ss = new ServerSocket(10000);
  5.         //等待客户端连接
  6.         Socket socket = ss.accept();
  7.         //读取数据并保存到本地文件
  8.         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  9.         BufferedWriter bh = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://新建文件夹//xiao.txt"), "UTF-8"));
  10.         
  11.         String s;
  12.         while ((s = br.readLine()) != null) {
  13.             bh.write(s);
  14.             bh.newLine();
  15.             bh.flush();
  16.         }
  17.         
  18.         socket.close();
  19.         ss.close();
  20.     }
  21. }
复制代码


现在,当从BufferedReader读取到null值时,循环会结束,不会尝试将null值写入文件。这样可以防止出现NullPointerException异常。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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值写入文件。这里是修改后的代码:

  1. public class Serverx {
  2.     public static void main(String args[]) throws IOException {
  3.         //创建对象并绑定端口      
  4.         ServerSocket ss = new ServerSocket(10000);
  5.         //等待客户端连接
  6.         Socket socket = ss.accept();
  7.         //读取数据并保存到本地文件
  8.         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  9.         BufferedWriter bh = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://新建文件夹//xiao.txt"), "UTF-8"));
  10.         
  11.         String s;
  12.         while ((s = br.readLine()) != null) {
  13.             bh.write(s);
  14.             bh.newLine();
  15.             bh.flush();
  16.         }
  17.         
  18.         socket.close();
  19.         ss.close();
  20.     }
  21. }
复制代码


现在,当从BufferedReader读取到null值时,循环会结束,不会尝试将null值写入文件。这样可以防止出现NullPointerException异常。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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();
}
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我回复你的新帖子了,不好意思,刚刚家里突遭变故,停电了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-14 21:48:48 | 显示全部楼层
isdkz 发表于 2023-4-14 21:42
我回复你的新帖子了,不好意思,刚刚家里突遭变故,停电了

你是我的神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-14 21:50:26 | 显示全部楼层

不敢当不敢当
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 18:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表