这是之前做过的一个笔试题,最近闲来无事,动手试着写了一下,发现自己对IO流的使用还是不够,仍需加强!!!
题干:要求一个客户端通过socket编程将本地的一个文件发送到服务端,服务端接收完毕后退出程序
服务端代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @FileName:Server.java
* @Time:2016-10-15
*/
public class Server {
public static void main(String[] args) throws IOException{
//1.创建服务端
ServerSocket ss = new ServerSocket(10000);
//接收客户端
Socket socket = null;
//2.获取输出流,向文件中写入内容
File f = new File("d:/newIn.txt");
FileOutputStream out = new FileOutputStream(f);
String str = null;
//byte buffs[] = new byte[1024];
//int length = 0;
//3.获取输入流
InputStream in = null;
InputStreamReader isr = null;
BufferedReader br = null;
String nextLine = System.getProperty("line.separator");
while(true){
socket = ss.accept();
in = socket.getInputStream();
isr = new InputStreamReader(in);
br = new BufferedReader(isr);
while((str = br.readLine())!=null){
System.out.println("接收到的数据:"+str);
out.write((str+nextLine).getBytes());
out.flush();
}
out.close();
System.exit(0);
}
}
}
客户端代码:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
/**
* @FileName:SocketAndServer.java
* @Time:2016-10-15
*/
public class Client {
public static void main(String[] args) throws IOException, InterruptedException {
//1.创建socket,连接到服务端
Socket socket = new Socket("localhost",10000);
//2.获取输出流,向服务端发送信息
//字节输出流
OutputStream os = socket.getOutputStream();
//将输出流包装成打印流
PrintWriter pw = new PrintWriter(os);
//3.获取输入流,读取文件中的信息
//文件输入流
InputStream in = new FileInputStream("e://place.txt");
InputStreamReader isr = new InputStreamReader(in,"GBK");
BufferedReader br = new BufferedReader(isr);
String str = null;
while((str = br.readLine())!=null){
System.out.println("文件读取内容为: "+str);
pw.write(str+"\r\n");
pw.flush();
Thread.sleep(1000);
}
pw.close();
br.close();
in.close();
os.close();
}
}
程序运行截图: