首页 > 代码库 > TCP上传文本

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上传文本