服务器端
package com.haoran.lesson02;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class TcpServerDemo02 {
public static void main(String[] args) throws Exception {
//创建端口
ServerSocket serverSocket = new ServerSocket(8888);
//监听客户端的连接,阻塞式监听,会一直等待客户端的请求,
Socket socket = serverSocket.accept();
//获取输入流
InputStream inputStream = socket.getInputStream();
//管道输出流
FileOutputStream fileOutputStream = new FileOutputStream(new File("receive.jpg"));
//文件输出
byte[] buffer = new byte[1024];
int length;
while ((length=inputStream.read(buffer))!=-1){
fileOutputStream.write(buffer,0,length);
}
//通知客户端接受完毕,可以断开连接
OutputStream outputStream1 = socket.getOutputStream();
outputStream1.write("我接受完毕了,你可以断开了".getBytes(StandardCharsets.UTF_8));
outputStream1.close();
fileOutputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}
用户端
package com.haoran.lesson02;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
//=========在客户端发送文件=============
public class TcpClientDemo02 {
public static void main(String[] args) throws Exception {
//通过ip地址和端口号,创建一个sock类,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),8888);
//创建一个输出流—outputStream 发送消息IO流
OutputStream outputStream = socket.getOutputStream();
//读取文件
FileInputStream fileInputStream = new FileInputStream(new File("src/java.jpg"));
byte[] buffer=new byte[1024];
int length;
while((length=fileInputStream.read(buffer))!=-1){
outputStream.write(buffer,0,length);
}
//通知服务,已经发送完毕
socket.shutdownOutput();
//确定服务器接收完毕,然后断开连接
InputStream inputStream = socket.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer1=new byte[1024];
int length1;
while((length1=inputStream.read(buffer1))!=-1){
byteArrayOutputStream.write(buffer1,0,length1);
}
System.out.println(byteArrayOutputStream.toString());
byteArrayOutputStream.close();
inputStream.close();
fileInputStream.close();
outputStream.close();
socket.close();
}
}