服务端:
public class Server { //将本地文件上传到服务器,接收服务器的反馈 //服务器:接收客户端上传的文件,上传完毕后给反馈 public static void main(String[] args) throws IOException { //创建对象并绑定端口 ServerSocket ss = new ServerSocket(10001); //等待客户端来连接 Socket socket = ss.accept(); //读取数据并保存到本地文件中 //getInputStream是字节流 ,速度太慢了 于是用字符流包裹,再用缓冲流进行 包裹 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //这里用UUID来防止图片重名的现象 String s = UUID.randomUUID().toString().replaceAll("-", ""); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("..\\Day04\\serverdir\\"+s+".jpg")); int len; while ((len = br.read()) != -1) { bos.write(len); } //4.回写数据 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); bw.write("上传成功"); bw.newLine(); bw.flush(); //释放资源 socket.close(); ss.close(); } }
客户端:
public class Client { public static void main(String[] args) throws IOException { //创建socket对象,并连接到服务器 Socket socket=new Socket("127.0.0.1",10001); //读取本地文件的数据,并写到服务器当中 BufferedInputStream bis = new BufferedInputStream(new FileInputStream( "..\\Day04\\clientdir\\a.jpg" )); BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream()); byte[] bytes = new byte[1024]; int len; while((len=bis.read(bytes))!=-1){ bos.write(bytes,0,len); } //往服务器写出结束标记 socket.shutdownOutput(); //接收服务器的回写数据 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = br.readLine(); System.out.println(line); //释放资源 socket.close(); } }