JAVA网络编程09---TCPdemo1客户端上传txt文件服务端接收并写入文件,使用多线程来一个客户端就开启一个线程为他服务

实现客户端从文本文件读取数据
把数据给到服务器 服务器接收数据并保存到文件

服务器一直开着 来一个客户端就多开器一个线程
使用到了多线成的技术

//客户端代码

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();
}


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值