在网络编程的小综合练习中,发现服务器出现了空指针异常(NullPointerException)
其实代码没问题,是之前将改文件夹设置成了"测试资源根"
以下为问题描述
客户端(KHD.class)向服务器(FWQ.class)请求下载一个文件
以下是服务器代码
package com.itheima.inherit.day13;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class FWQ {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(15131);//服务器开门营业
//这是读取文件名
Socket socket = ss.accept();//创建服务器接收数据的通道
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//文件名
String name = br.readLine();//读数据
System.out.println("服务器收到一个一个下载" +name+"文件的请求");
//用本地文件字节流导入文件数据
InputStream fis = FWQ.class.getClassLoader().getResourceAsStream(name);
//获得网络输出流
OutputStream out = socket.getOutputStream();
//数组来装读到的内容
byte[] bytes = new byte[8192];
int len;
while ((len=fis.read(bytes))!=-1) {
//一直往数组里面读
out.write(bytes,0,len);//不断用网络输出流来传递
}
socket.shutdownOutput();
//结束循环就代表传递成功了
System.out.println("传递成功了!");
//打扫卫生
ss.close();
socket.close();
fis.close();
//关服务器/关通道/关输入流
}
}
以下是客户端代码
package com.itheima.inherit.day13;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
import java.util.UUID;
public class KHD {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 15131);//客户端立个牌子
Scanner sc = new Scanner(System.in);//导入键盘录入功能
System.out.println("请输入需要的文件名称");
String name = sc.next();
//获得网络输出流,字节->转换流->字符流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(name);//路径:ServerDir/moom.jpg
bw.newLine();
bw.flush();
//用网络字节输入流接受数据
FileOutputStream fops = new FileOutputStream("ClientDir/"+UUID.randomUUID().toString().replace("-","") +"jpg");
InputStream is = socket.getInputStream();
byte[] bytes = new byte[8192];
int len;
while ((len = is.read(bytes)) != -1) {
fops.write(bytes, 0, len);
}
//写入到本地文件中
//完事,打扫屋子
socket.close();
fops.close();
System.out.println("客户端文件下载完毕...");//现在这个客户端就跟标准答案一模一样了...
}
}
结果就收到了以下报错
FWQ:
KHD: