1、先在系统文件下创建我们要传输的文件
在java.txt写下传输数据hello
2、先写客户端
public class ClientFile {
public static void main(String []args){
try {
//创建客户端Socket,指定服务器的地址和端口号
Socket socket = new Socket("localhost",7878);
//先:获取要发送的文件,并读取文件
File file = new File("D:\\TestFile\\java.txt");
if (!file.exists()){
System.out.println("客户端要发送的数据不存在!");
}else {
//用文件流打开文件
FileInputStream fis = new FileInputStream(file);
//将文件流转换为字符流
InputStreamReader isr = new InputStreamReader(fis);
//将字符流放入缓冲区(加速提取)
BufferedReader br = new BufferedReader(isr);
String line =br.readLine();
//后:进行服务器和客户端的通信
OutputStream os =socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
//把文件中的内容读取,同时发送出去
while (line!=null){
pw.write(line);
pw.flush();
line=br.readLine();
}
socket.shutdownOutput();
//当服务器接收到上面的请求反馈的回来进行:接收服务器端的数据
InputStream is = socket.getInputStream();
InputStreamReader isr1 = new InputStreamReader(is);
BufferedReader br1 = new BufferedReader(isr1);
String data = br1.readLine();
while (data!=null){
System.out.println("服务器端对我说:"+data);
data=br1.readLine();
}
socket.shutdownInput();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、写服务器端
public class ServerFile {
public static void main(String []args){
try {
//创建服务器Socket,即ServerSocket,指定端口号和IP,并监听此端口
ServerSocket serverSocket = new ServerSocket(7878);
System.out.println("***服务器端已启动");
int count = 0;
//循环监听客户端的请求
while (true){
Socket socket = serverSocket.accept();
//先看下面的子线程类
ServerFileThread serverFileThread = new ServerFileThread(socket);
serverFileThread.start();
count++;
System.out.println("目前访问服务器的客户端一共有:"+count+"个");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4、写子线程 ServerFileThread.java
public class ServerFileThread extends Thread {
Socket socket;
InputStream is = null;
InputStreamReader isr=null;
BufferedReader br =null;
public ServerFileThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
//和客户端进行通讯
is =socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
//创建文件,打开文件,往文件里面写数据
File file = new File("D:\\TestFile\\android.txt");
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw);
//把客户端传入的文件中内容读取
String data = br.readLine();
while (data!=null){
bw.write(data);
bw.flush();
data=br.readLine();
}
socket.shutdownInput();
System.out.println("我是服务器端,文件已写入");
//反馈信息给客户端
OutputStream os=socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("欢迎你~");
pw.flush();
socket.shutdownOutput();;
} catch (IOException e) {
e.printStackTrace();
}finally {
if (br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (isr!=null){
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
5、看运行效果
如果对您有帮助,麻烦您点个赞哦~谢谢。