Socket编程(一)TCP传输文件

来源:互联网 发布:泗洪网络问政 编辑:程序博客网 时间:2024/05/17 10:39

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"/>
0 0