客户端:
package com.tencent.network;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class FileClient {
public static void main(String[] args) {
try {
// 建立连接
Socket socket = new Socket(InetAddress.getByName("127.0.0.1") , 9000);
// 输出流
OutputStream os = socket.getOutputStream();
// 文件输入流
FileInputStream fs = new FileInputStream(new File("./file.out"));
// 缓冲区 依次写入 输出流
byte[] buffer = new byte[1024];
int len = 0;
while((len = fs.read(buffer)) != -1) {
os.write(buffer , 0 , len);
}
//通知服务器 我传输完了!
socket.shutdownOutput();
// 确认服务器接收完毕 输入流
InputStream is = socket.getInputStream();
ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] buffer2 = new byte[1024];
int len2 = 0;
while((len2 = is.read(buffer2)) != -1) {
bo.write(buffer2 , 0 , len2);
}
System.out.println(bo.toString());
// 关闭资源
fs.close();
os.close();
socket.close();
} catch (Exception e ) {
e.printStackTrace();
}
}
}
服务端:
package com.tencent.network;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class FileServer {
public static void main(String[] args) {
try {
// 创建服务socket
ServerSocket serverSocket = new ServerSocket(9000);
// 阻塞式监听 会一直等待客户端发送信息
Socket socket = serverSocket.accept();
// 输入流
InputStream is = socket.getInputStream();
// 文件输出流
FileOutputStream fos = new FileOutputStream(new File("new"));
//把文件的输出流到输入流去
int len = 0;
byte[] buffer = new byte[1024];
while((len = is.read(buffer)) != -1) {
fos.write(buffer , 0 , len);
}
OutputStream os = socket.getOutputStream();
os.write("我接收完毕了,你可以断开了".getBytes());
// 关闭资源
fos.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}