实现客户端从文本文件读取数据
把数据给到服务器 服务器接收数据并保存到文件
服务器一直开着 来一个客户端就多开器一个线程
使用到了多线成的技术
//客户端代码
public static void main(String[] args) throws IOException {
//客户端的socket对象
Socket socket = new Socket("192.168.0.109" , 10011);
//scket的输出流 用于向服务器发送数据
OutputStream socketout = socket.getOutputStream();
//包装为字符缓冲输出流
BufferedWriter socketbw = new BufferedWriter(new OutputStreamWriter(socketout)) ;
//创建文件输入流 包装为字符缓冲输入流
//字节输入流
FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\IdeaProjects\\Day08_thread" +
"\\MyInternet\\src\\TCPDemo6plus\\source.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
//开始读取数据
String filedata ;
while ( (filedata = br.readLine()) != null){
//开始发送给服务器
socketbw.write(filedata);
socketbw.newLine();
socketbw.flush();
}
//给服务器一个提示说我已经上传数据完毕了
socket.shutdownOutput();
//开始接收服务器的反馈
//socket的字节输入流
InputStream inputStream = socket.getInputStream();
//报装为字符缓冲输入流
BufferedReader br_recback = new BufferedReader(new InputStreamReader(inputStream));
String rec = br_recback.readLine();
System.out.println("客户端"+socket.getInetAddress()+":"+rec);
//释放资源
fis.close();
socket.close();
}
//服务器端的代码
这里服务器端只是开启一个线程,具体处理操作交给serverThread处理
/*
实现来一个客户端就开启一个线程
客户上传完数据以后就给客户端一个反馈
*/
public static void main(String[] args) throws IOException {
//服务器sockt对象
ServerSocket ss = new ServerSocket(10011);
//开始创建线程
while (true){
//监听客户端
Socket socket = ss.accept();
// ServerThread serverThread = new ServerThread(socket);
// Thread thread = new Thread(serverThread);
// thread.start();
// 上面三句合并为一句 开线程
new Thread(new ServerThread(socket)).start();
}
//ss.close(); 服务器一般不关闭
}
//服务器具体的处理代码
我们为了方式服务器创建文件的时候发生同名文件的问题 我们就写一个方法让服务器每一次创建文件的时候名字都不一样
package TCPDemo6plus;
import java.io.*;
import java.net.Socket;
public class ServerThread implements Runnable {
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
//接收客户端的数据 写到文本文件
//socket的输入流 获取客户端的数据
InputStream socket_is = null;
try {
socket_is = socket.getInputStream();
//包装为BufferedReader
BufferedReader s_br = new BufferedReader(new InputStreamReader(socket_is));
//解决一下文件重名的问题
int count = 0;
File file = new File("C:\\Users\\Administrator\\IdeaProjects\\Day08_thread" +
"\\MyInternet\\src\\TCPDemo6plus","copy["+count+"].txt");
while (file.exists()){
count++;
//再创建写一个新的文件
file = new File("C:\\Users\\Administrator\\IdeaProjects\\Day08_thread" +
"\\MyInternet\\src\\TCPDemo6","copy["+count+"].txt");
}
//创建字符输出流 把数据写到文件里面
FileOutputStream fos = new FileOutputStream(file);
//优化为字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
//开始读取数据
String data ;
while ( (data = s_br.readLine()) != null){
//写入文件
bw.write(data);
bw.newLine();
bw.flush();
}
//给客户端一个反馈
//获得socket的输出流
OutputStream s_os = socket.getOutputStream();
//包装
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(s_os));
br.write("上传完毕");
br.newLine();
br.flush();
//释放资源
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}