1.6 TCP 文件上传
我们其实 写 文件 上传,也是 根据 IO 流来写的。
创建 文件 的 输入流,把待上传的文件 写到客户端Socket对象的输出流里面。 输出流里面。然后 通过 Socket 连接对象,服务器 端就可以 从 该对象身上 的 输入流里面 提取出 你刚才 写到 输出流里面的东西。
- 服务端
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServerDemo02 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
FileOutputStream fos = new FileOutputStream("头像.jpg");
byte[] buffer = new byte[1024];
int len;
while((len = is.read(buffer)) != -1){
fos.write(buffer,0,len);
}
OutputStream os = socket.getOutputStream();
os.write("文件接收完毕!".getBytes());
socket.shutdownOutput();
//关闭资源
os.close();
fos.close();
is.close();
socket.close();
serverSocket.close();
}
}
- 客户端 要介绍通知服务器我已传输完毕的一个方法(关闭socket输出流!只要你一关闭,服务器端 就会认为 你传输完毕!!)
//通知服务器,我已传输完毕 socket.shutdownOutput();
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpClientDemo02 {
public static void main(String[] args) throws IOException {
InetAddress IP = InetAddress.getByName("127.0.0.1");
int port = 9999;
Socket socket = new Socket(IP, port);
OutputStream gops = socket.getOutputStream();
FileInputStream fis = new FileInputStream("src/头像.jpg");
byte[] buffer = new byte[1024];
int len;
int i = 1;
while((len = fis.read(buffer)) != -1){
gops.write(buffer,0,len);
System.out.println("第"+(i++)+"行数据,写入完毕!");
}
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer2 = new byte[1024];
int len2 = 0;
while((len2 = inputStream.read(buffer2)) != -1){
baos.write(buffer2, 0, len2);
}
System.out.println(baos.toString());
socket.shutdownInput();
//通知服务器,我已经传输完毕
baos.close();
inputStream.close();
fis.close();
gops.close();
socket.close();
}
}
忠告:无论是 JavaGUI、JavaThread、Java网络编程,这些 都是要 反复 的 去 复习自己学过的知识,和敲案例练习的。否则 会 忘得很快!因为 这属于 技术知识。而不是 编程语言的 语法知识!!! 是很容易忘的。