使用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)
出错的原因是啥 根据您提供的代码和异常信息,这个错误是因为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异常。
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();
}
} 白痴爱面包 发表于 2023-4-14 21:04
这是客户端的代码为什么新建的文件为空
public class Client{
public static void main(String args[] ...
我回复你的新帖子了,不好意思,刚刚家里突遭变故,停电了{:10_277:} isdkz 发表于 2023-4-14 21:42
我回复你的新帖子了,不好意思,刚刚家里突遭变故,停电了
你是我的神{:10_256:} 白痴爱面包 发表于 2023-4-14 21:48
你是我的神
不敢当不敢当{:5_109:}
页:
[1]