使用Java进行TCP编程时,需要使用Socket模型
什么是Socket?
在开发网络应用程序的时候,会遇到Socket这个概念。Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据传输到网络。
(1)TCP服务器端
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
// 文件服务器
public class Main {
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(8008)) {
while(true){
// 客户端连接
Socket client = server.accept();
// 文件名
String fileName = String.format("%s.jpg", client.getInetAddress().getHostName());
try(BufferedInputStream bis = new BufferedInputStream(client.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:\\test\\upload\\"+fileName));
OutputStream out = client.getOutputStream();){
// 读取客户端发送的文件字节内容,并写入本地磁盘文件
byte[] buff = new byte[1024];
int len = -1;
while((len = bis.read(buff))!= -1) {
bos.write(buff,0,len);
System.out.println("【服务器】"+len);
}
bos.flush();
System.out.println("【服务器】上传完毕!!!!");
// 向客户端发送“反馈消息”
out.write("文件上传成功!".getBytes(StandardCharsets.UTF_8));
out.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2)TCP客户端
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
// 文件上传客户端
public class Main {
public static void main(String[] args) {
try (Socket socket = new Socket("127.0.0.1",8008);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\APESOURCE\\Pictures\\baby.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
// 读取本地文件,发送至服务器
byte[] buff = new byte[1024];
int len = -1;
while((len = bis.read(buff)) != -1) {
bos.write(buff,0,len);
System.out.println(len);
}
bos.flush();
bos.close();
// 读取服务器反馈消息
String message = reader.readLine();
message = new String(message.getBytes(),StandardCharsets.UTF_8);
System.out.println(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}