ClientDemo.class
import java.io.*;
import java.net.Socket;
//客户端:数据来源于文本文件
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket s = new Socket("192.168.157.1",10000);
//封装文本文件的数据
BufferedReader br = new BufferedReader(new FileReader("hmceshi\\InetDemo.java"));
//封装输出流写数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while((line = br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
// //自定义结束标记,但下面3行会导致复制的文件中出现“886”字符,就会结束,所以一般不用
// bw.write("886");
// bw.newLine();
// bw.flush();
//shutdownOutput作为结束传输标记取代上面的自定义标记
s.shutdownOutput();
//接受反馈
BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = brClient.readLine();
System.out.println("服务器的反馈"+data);
br.close();
s.close();
}
}
ServerDemo.class
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
//服务器:接收到的数据写入文本文件,给出反馈,代码用线程进行封装,为每个客户开一个线程
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10000);
//确定服务器是一直开着的
while(true) {
//监听客户端的连接,返回一个对应的Socket对象
Socket s = ss.accept();
//为每一个客户端都开启一个线程
new Thread(new ServerThread(s)).start();
}
// ss.close();
}
}
ServerThread.class
import java.io.*;
import java.net.Socket;
public class ServerThread implements Runnable{
private Socket s;
public ServerThread(Socket s) {
}
@Override
public void run() {
//接收数据写道文本文件
try {
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//解决名称冲突问题
int count = 0;
File file = new File("hmceshi\\Copy.java");
while (file.exists()){
count++;
file = new File("hmceshi\\Copy["+"].java");
}
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
String line;
while((line = br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
//给出反馈
BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bwServer.write("文件上传成功");
bwServer.newLine();
bwServer.flush();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
B站学习笔记,来自黑马程序员。黑马程序员全套Java教程_Java基础入门视频教程,零基础小白自学Java必备教程_哔哩哔哩_bilibili