【需求】:将一个文件从客户端发送至服务端
【难点】:
结束标志:
方式一:在末尾处打印自定义结束标志“over”,但是存在缺陷,可能复制的文本中存在该字符串。
方式二:时间戳(但是比较繁琐)。
方式三:直接调用方法shutdownOutput();相当于给流中加入一个结束标记。
【代码】:
import java.io.*;
import java.net.*;
class CopyClient
{
public static void main(String[] args) throws Exception
{
Socket s=new Socket("127.0.0.1",10005);
BufferedReader br=new BufferedReader(new FileReader("D:\\WorkSpace\\网络编程\\Demo.java"));
//写
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
String line=null;
while((line=br.readLine())!=null){
out.println(line);
}
s.shutdownOutput();
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
String str=in.readLine();
System.out.println(str);
br.close();
s.close();
}
}
class CopyServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss=new ServerSocket(10005);
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"connected...");
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw=new PrintWriter(new FileWriter("copy.txt"),true);
String line=null;
while((line=in.readLine())!=null){
pw.println(line);
}
PrintWriter out=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
pw.write("上传成功");
pw.close();
s.close();
ss.close();
}
}
【截图】: