学习进度到了网络编程这一块,讲真的,这个编写最简单的服务器和客户端本来还是挺简单的,就是从客户端发送给服务器一条信息,然后服务器再回你一条信息,而且老师在上课的时候把他编写的服务器开启,让我们连接上去,在里面发言还是挺有意思的,但是在下课的时候布置了一道作业,就是在客户端利用Io流读取一个文件,然后将这个文件通过客户端发送到 服务器,然后服务器在将这个文件保存到硬盘里面。好吧思路确实很明确,但是我在做的过程中却遇到了很多的问题,我先是在c盘放了图片,本来想是通过客户端读取,发送到服务器,再由服务器存储到D盘里面,但是一直出现个问题。说我的文件路径或者文件夹不对,,当时折磨了一晚上也没做出来,在第二天早晨的时候,终于出了点效果。我把客户端读取的路径放在了本项目目录下,然后将文件换成了TXT的文件,在向D盘里面写的时候,成功了! 但是当我换成jgp形式的文件的时候,还是会报文件或文件夹路径的异常!本来是想问老师的,但是老师已经开始讲解新的知识了,所以就把这个问题发到了这里,希望有哪位大神帮忙解答一下! 感激不尽!
代码如下:
先是服务器:
package com.gc.Socket.UpLoad;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;
public class UploadServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8000);
while(true) {
Socket socket = serverSocket.accept();
new Thread() {
public void run() {
try {
//拿到socket的输入流读取客户端发送过来的数据
InputStream is = socket.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
//得到输出流将数据写到硬盘上
//组装上传文件的父目录
File dir = new File("C:\\B");
if(!dir.exists()){
dir.mkdir();
}
//组装文件的完整路径
File file = new File(dir,UUID.randomUUID().toString()+".txt");
//写数据到文件
FileOutputStream fos = new FileOutputStream(file, true);
BufferedOutputStream bos = new BufferedOutputStream(fos);
//一边读一边写
byte[] buf = new byte[1024*8];
int length = -1;
while((length = bis.read(buf))!=-1 ){
bos.write(buf, 0, length);
bos.flush();
}
socket.shutdownOutput();
fos.close();
bos.close();
socket.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
}
然后是客户端:
package com.gc.Socket.UpLoad;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class UploadClient {
public static void main(String[] args) {
try {
// 上传图片的路径
File file = new File("a.txt");
System.out.println("---------");
FileInputStream fis = new FileInputStream(file);
// 缓冲字节流读取上传的图片文件
System.out.println("---------");
BufferedInputStream bis = new BufferedInputStream(fis);
// 将图片的字节流传送给服务端
Socket socket = new Socket("192.168.1.53", 8000);
OutputStream out = socket.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(out);
// 缓存数组
byte[] buf = new byte[1024 * 8];
// 一边读图片文件,一边往服务器端写
int length = -1;
while ((length = bis.read(buf)) != -1) {
bos.write(buf, 0, length);
}
//有个小问题
//socket.shutdownOutput(); 关闭socket的输出流
//socket.shutdownInput(); 关闭socket的输入流
fis.close();
bis.close();
bos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
程序里面哪里出现了问题?希望大神们前来解惑!!!