android的学习:Socket通信之文件传输

1、先在系统文件下创建我们要传输的文件
在这里插入图片描述在java.txt写下传输数据hello

2、先写客户端

public class ClientFile {
    public static  void main(String []args){
        try {
        	//创建客户端Socket,指定服务器的地址和端口号
            Socket socket = new Socket("localhost",7878);
            //先:获取要发送的文件,并读取文件
            File file = new File("D:\\TestFile\\java.txt");
            if (!file.exists()){
                System.out.println("客户端要发送的数据不存在!");
            }else {
                //用文件流打开文件
                FileInputStream fis = new FileInputStream(file);
                //将文件流转换为字符流
                InputStreamReader isr = new InputStreamReader(fis);
                //将字符流放入缓冲区(加速提取)
                BufferedReader br = new BufferedReader(isr);
                String line =br.readLine();
                
                //后:进行服务器和客户端的通信
                OutputStream os =socket.getOutputStream();
                PrintWriter pw = new PrintWriter(os);
                //把文件中的内容读取,同时发送出去
                while (line!=null){
                    pw.write(line);
                    pw.flush();
                    line=br.readLine();
                }
                socket.shutdownOutput();

                //当服务器接收到上面的请求反馈的回来进行:接收服务器端的数据
                InputStream is = socket.getInputStream();
                InputStreamReader isr1 = new InputStreamReader(is);
                BufferedReader br1 = new BufferedReader(isr1);
                String data = br1.readLine();
                while (data!=null){
                    System.out.println("服务器端对我说:"+data);
                    data=br1.readLine();
                }
                socket.shutdownInput();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3、写服务器端

public class ServerFile {
    public static void main(String []args){
        try {
        	//创建服务器Socket,即ServerSocket,指定端口号和IP,并监听此端口
            ServerSocket serverSocket = new ServerSocket(7878);
            System.out.println("***服务器端已启动");
            int count = 0;
            //循环监听客户端的请求
            while (true){
                Socket socket = serverSocket.accept();
                //先看下面的子线程类
                ServerFileThread serverFileThread = new ServerFileThread(socket);
                serverFileThread.start();
                count++;
                System.out.println("目前访问服务器的客户端一共有:"+count+"个");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4、写子线程 ServerFileThread.java

public class ServerFileThread extends Thread {
    Socket socket;
    InputStream is = null;
    InputStreamReader isr=null;
    BufferedReader br =null;
    public ServerFileThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {

        try {
            //和客户端进行通讯
            is  =socket.getInputStream();
            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);

            //创建文件,打开文件,往文件里面写数据
            File file = new File("D:\\TestFile\\android.txt");
            FileOutputStream fos = new FileOutputStream(file);
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            BufferedWriter bw = new BufferedWriter(osw);

            //把客户端传入的文件中内容读取
            String data = br.readLine();
            while (data!=null){
                bw.write(data);
                bw.flush();
                data=br.readLine();

            }
            socket.shutdownInput();
            System.out.println("我是服务器端,文件已写入");

            //反馈信息给客户端
            OutputStream os=socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("欢迎你~");
            pw.flush();
            socket.shutdownOutput();;
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (br!=null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
             if (isr!=null){
                 try {
                     isr.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
             if (is!=null){
                 try {
                     is.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }


        }
    }
}

5、看运行效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果对您有帮助,麻烦您点个赞哦~谢谢。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值