客户端

public static void main(String[] args) {
Socket socket = null;
OutputStream outputStream = null;
FileInputStream fileInputStream = null;
InputStream inputStream = null;
ByteArrayOutputStream byteArrayOutputStream = null;
try {
//创建连接
socket = new Socket(InetAddress.getByName("127.0.0.1"), 10001);
//创建输出流
outputStream = socket.getOutputStream();
//读取文件
fileInputStream = new FileInputStream(new File("d:\\test\\1.jpg"));
//写出文件
//创建Buffer
byte[] buffer = new byte[1024];
int read;
while ((read = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, read);
}
//通知服务端,已经传输完了
socket.shutdownOutput();

//确定服务端接收完毕,才能断开
inputStream = socket.getInputStream();
//创建管道/
byteArrayOutputStream = new ByteArrayOutputStream();
//创建Buffer
byte[] bufferCheck = new byte[1024];
int readCheck;
while ((readCheck = inputStream.read(bufferCheck)) != -1) {
byteArrayOutputStream.write(bufferCheck, 0, readCheck);
}
System.out.println(byteArrayOutputStream.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (byteArrayOutputStream != null) {
try {
byteArrayOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
}

服务端

public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inputStream = null;
FileOutputStream fileOutputStream = null;
OutputStream outputStream = null;
try {
serverSocket = new ServerSocket(10001);
//加上while,服务端可以一直接收,会收不到结束通知
//while (true){
//阻塞式监听,会一直等待客户端连接
socket = serverSocket.accept();
//读取客户端消息
inputStream = socket.getInputStream();
//1,创建管道/
//byteArrayOutputStream = new ByteArrayOutputStream();
//文件输出
fileOutputStream = new FileOutputStream(new File("d:\\test\\receive.jpg"));
//创建Buffer
byte[] buffer = new byte[1024];
//读取数据到Buffer
int read;
while ((read = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, read);
}
//通知客户端已经接收完毕
outputStream = socket.getOutputStream();
outputStream.write("已经结束".getBytes());
//}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
}

d:\test\1.jpg 文件要存在,即可生成新的