需求说明:我们来做一个“文件上传案例”,有以下要求:
将项目中的一个图片,通过客户端上传至服务器
答案
操作步骤:
1,创建服务器,等待客户端连接
2,创建客户端Socket,连接服务器
3,获取Socket流中的输出流,功能:用来把数据写到服务器
4,创建字节输入流,功能:用来读取数据源(图片)的字节
5,把图片数据写到Socket的输出流中(把数据传给服务器)
6,客户端发送数据完毕,结束Socket输出流的写入操作,告知服务器端
7,获取Socket的输入流
8,创建目的地的字节输出流
9,把Socket输入流中的数据,写入目的地的字节输出流中
10,获取Socket的输出流, 作用:写反馈信息给客户端
11,写反馈信息给客户端
12,获取Socket的输入流 作用: 读反馈信息
13,读反馈信息
代码:
public class TCPServer {
public static void main(String[] args)throws IOException {
//1创建服务器对象
ServerSocket server = new ServerSocket(9898);
//2等待客户端连接 如果有客户端连接 获取到客户端对象
Socket s = server.accept();
//3当前在服务器中 读取数据
InputStream in = s.getInputStream();
//4当前在服务器中 将数据写到流中
FileOutputStream fos = new FileOutputStream("/Users/apple/Documents/复制品.JPG");
byte[] bytes = new byte[1024];
int len = 0 ;
while((len = in.read(bytes))!=-1){
fos.write(bytes, 0, len);
}
//5写完数据提示上传成功
s.getOutputStream().write("上传成功".getBytes());
//6释放资源
fos.close();
s.close();
server.close();
}
}
public class TCPCleint {
public static void main(String[] args)throws IOException {
//1创建服务器对象
Socket s = new Socket("127.0.0.1", 9898);
//2指定路径
FileInputStream fis = new FileInputStream("/Users/apple/Desktop/1.JPG");
//3读取服务器数据
OutputStream out = s.getOutputStream();
byte[] bytes = new byte[1024];
int len = 0;
while((len = fis.read(bytes))!=-1) {
out.write(bytes,0,len);
}
//4告知书写完毕
s.shutdownOutput();
//5书写到服务器
InputStream in = s.getInputStream();
len = in.read(bytes);
System.out.println("服务器:"+new String(bytes,0,len));
//6释放资源
fis.close();
s.close();
}
} |
|