思路:
①创建客户端Socket与服务端ServerSocket;调用相应的get方法获取流;
②处理数据:先确定要处理的数据(文本文件、非文本文件或字符串),确定后考虑使用相应的流处理。补充:本次以处理图片为例(非文本文件)。
③关闭资源。
/**
* 实现TCP的网络编程
* 例题2:客户端发送文件给服务端,服务端将文件保存在本地。
* @Author: ObitoSnn
* @Description:
* @Date 2020/10/15 23:06
*/
public class TCPTest2 {
@Test
public void client() {
Socket socket = null;
OutputStream os = null;
BufferedInputStream bis = null;
try {
//创建客户端Socket,指明服务器端IP和端口号
String severAddress = InetAddress.getLocalHost().getHostAddress();//本机IP地址
socket = new Socket(severAddress, 8899);//因为是在同一台电脑上,所以IP地址为本机地址
//获取流
os = socket.getOutputStream();
//数据处理
bis = new BufferedInputStream(new FileInputStream("Sasuke.jpg"));
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
os.write(buffer, 0, len);
os.flush();//清空缓存区,将缓冲区中的数据强制写出
}
System.out.println("send done");
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭资源
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void server() {
ServerSocket serverSocket = null;
Socket accept = null;
InputStream is = null;
BufferedOutputStream bos = null;
try {
//创建服务端ServerSocket,指明服务端的端口号
serverSocket = new ServerSocket(8899);
//调用accept(),表明接收来自客户端的Socket
accept = serverSocket.accept();
//获取流
is = accept.getInputStream();
//数据处理
bos = new BufferedOutputStream(new FileOutputStream("Sasuke_copy.jpg"));
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
bos.write(buffer, 0, len);
bos.flush();//清空缓存区,将缓冲区中的数据强制写出
}
System.out.println("accept file from " + accept.getInetAddress().getHostAddress());
System.out.println("copy done");
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭资源
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (accept != null) {
try {
accept.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
注意:先运行server端再运行client端
运行前截图如下:
运行后截图如下: