1.客户端发送数据代码
要求:每个客户端读取文件,并上传至服务器。代码如下:
import java.io.*;
import java.net.Socket;
public class ClientDemo04 {
public static void main(String[] args) throws IOException {
//创建客户端Socke对象
Socket s = new Socket("zshao",10086);
//封装文本文件的数据
BufferedReader br = new BufferedReader(new FileReader("d/InetAddressDemo.java"));
//封装输出流的数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//读取数据并发送
String line ;
while ((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
s.shutdownOutput();
//接收反馈
BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = brClient.readLine();
System.out.println("收到的服务器的反馈是:"+data);
//释放资源
br.close();
s.close();
}
}
2.服务器接收数据
由于客户端要一直监听客户端的连接,所有代码如下:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo04 {
public static void main(String[] args) throws IOException {
//创建服务器Socket对象
ServerSocket ss = new ServerSocket(10086);
while (true){
// 监听客户端连接
Socket s = ss.accept();
//为每个客户端开启一个线程
new Thread(new ServerThread(s)).start();
}
}
}
其中ServerThread类如下:
import java.io.*;
import java.net.Socket;
public class ServerThread implements Runnable {
private Socket s;
public ServerThread(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
// BufferedWriter bw = new BufferedWriter(new FileWriter("day20/s.java"));
//解决文件名称冲突问题
int count = 0;
File f = new File("day20/s"+count+".java");
while (f.exists()){
count++;
f = new File("d/s"+count+".java");
}
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
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();
}
}
}