Socket编程(一)TCP传输文件

Socket作为应用网络交互的一种方式,可以称作为套接字。应用通常通过套接字来向网络发出请求或者应答请求。下面实现一个Socket基于TCP协议传输文件的交互应用。主要方法都在子线程中实现。

这是Socket服务端,也就是作为接收端。

class ServerThread extends Thread{
        @Override
        public void run() {
            ServerSocket serverSocket=null;
            try {
                //创建一个ServerSocket对象,并在4567端口监听
                serverSocket=new ServerSocket(4567);
                //调用ServerSocket的accept的方法,阻塞接收客户端请求
                Socket socket=serverSocket.accept();
                InputStream inputStream=socket.getInputStream();
                //实例化文件输出流的位置和文件名和位置
                FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory()+"/aa.jpg");
                byte buffer[]=new byte[1024*4];
                int temp=0;
                //从InputStream中读取接收的数据
                while((temp=inputStream.read(buffer))!=-1){
                    //通过输出流将文件生成
                    out.write(buffer,0,temp);
                    out.flush();
                }
                inputStream.close();
                out.close();

            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            super.run();
        }
    }

下面是作为Socket端,也就是发送信息的客户端。

    class ServerThread extends Thread{
        @Override
        public void run() {
            try {
                //创建一个Socket对象,指定服务器端的IP和端口
                Socket socket=new Socket("192.168.31.185",4567);
                //使用InputStream读取内存文件
                InputStream inputStream=new FileInputStream(Environment.getExternalStorageDirectory()+"/Download/aa.jpg");
                OutputStream outputStream=socket.getOutputStream();
                byte buffer[]=new byte[4*1024];
                int temp =0;
                //读取InputStream的数据,写入到OutputStream中
                while ((temp=inputStream.read(buffer))!=-1){
                    outputStream.write(buffer,0,temp);
                    outputStream.flush();
                }
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            super.run();
        }
    }

关于文件操作和Socket操作需要网络权限和文件操作权限,此处提示一下。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值