Java网络编程 TCP 上传文件示例
利用TCP协议简单模拟客户端和服务端的消息传输过程
客户端
步骤:
- 创建一个
Socket
实例(IP,端口) - 得到输出流
- 读取本地文件
- 利用输出流传输文件
- 传输完成后关闭通道
- 接收服务器传来的消息
- 关闭资源
代码如下:
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class TcpClientDemo {
public static void main(String[] args) throws IOException {
//1.创建一个Socket
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9999);
//2.创建一个输出流
OutputStream os = socket.getOutputStream();
//3.读取文件
FileInputStream fis = new FileInputStream(new File("D:/Download/MobileFile/1.jpg"));
//4.写出文件
fis.transferTo(os);
//传输完成关闭
socket.shutdownOutput();
//6.获取服务器传来的消息
InputStream is = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
is.transferTo(baos);
System.out.println(baos.toString());
baos.close();
fis.close();
os.close();
socket.close();
}
}
服务器
步骤:
- 创建一个
ServerSocke
t实例:开放端口 - 接收一个客户端的连接
- 创建一个输入流 用于获取服务端的输出数据
- 创建一个文件输出流 输出服务端发送的文件
- 输出文件
- 输出完毕给客户端发送消息
- 关闭资源
代码如下:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServerDemo {
public static void main(String[] args) throws IOException {
//创建一个ServerSocket实例:开放端口
ServerSocket serverSocket = new ServerSocket(9999);
//接收一个客户端的连接
Socket socket = serverSocket.accept();
//创建一个输入流 用于获取服务端的输出数据
InputStream is = socket.getInputStream();
//创建一个文件输出流 输出服务端发送的文件
FileOutputStream fos = new FileOutputStream(new File("C:/Users/11542/Desktop/receive.jpg"));
//输出文件
is.transferTo(fos);
//通知客户端已经收到
OutputStream os = socket.getOutputStream();
os.write("Server: copy that".getBytes());
os.close();
fos.close();
is.close();
socket.close();
serverSocket.close();
}
}