TCP上传文本
Posted 北方丶有佳人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP上传文本相关的知识,希望对你有一定的参考价值。
TCP上传文本其实就是文件的复制,只不过文件复制大多是发生在本地,而上传下载是发生在网络上。
注:TCP上传文本最要命的一个问题就是:客户端数据发送完毕,而服务端仍然在等待读取。这时,就需要客户端发送结束标记s.shutdownOutput(),该方法其实就是发送给服务端一个结束标记,这个标记也可以自己定义,但是自己定义有可能与发送的内容重复,所以建议使用shutdownxxxput()方法。
TCP上传文本的客户端:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class UpLoadClient { public static void main(String[] args) throws Exception, IOException { /* * 上传文本的客户端,读取本地文本数据,发送给服务器端,服务器端接收完毕后回馈“上传成功”字样 */ System.out.println("上传文本客户端启动....."); //客户端socket Socket s = new Socket("192.168.17.1",10001);//绑定要发送的ip地址以及端口号 //1.确定数据源。本地文本文件 BufferedReader bufr = new BufferedReader(new FileReader("NetSpider.txt")); //2.确定目的。socket输出流 // BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(),true);//自动刷新 String line = null; while((line = bufr.readLine())!=null){ out.println(line); } //给服务端发送标记 // out.println("over");//容易重复 //使用socket的禁用输出流方法。 s.shutdownOutput(); //3.通过socket读取流获取服务器端返回的数据 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String lineIn = bufIn.readLine();//阻塞式 System.out.println(lineIn); //4.关闭 bufr.close(); s.close(); } }
TCP上传文本的服务端:
import java.io.BufferedReader; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class UpLoadServer { public static void main(String[] args) throws Exception { /* * 上传文本的服务端,接收文本数据,并存储到文件中,服务器端接收完毕后,回馈“上传成功”字样 */ System.out.println("上传服务端启动...."); //1.服务端对象 ServerSocket ss = new ServerSocket(10001); //2.获取客户端 Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"...connected"); //3.获取读取流,确定源,网络socket BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //4.确定目的 PrintWriter pw = new PrintWriter(new FileWriter("server.txt"),true); //5.频繁读写 String line = null; while((line = bufIn.readLine())!=null){ // if("over".equals(line)){ // break; // } pw.println(line); } //6.改客户端反馈信息 PrintWriter out = new PrintWriter(s.getOutputStream(),true); out.println("上传成功"); pw.close(); s.close(); ss.close(); } }
以上是关于TCP上传文本的主要内容,如果未能解决你的问题,请参考以下文章