基于TCP协议的Socket编程,实现文件的上传
2016-03-18 19:59
686 查看
说明:
数据的上传读取都涉及数据I/O流,I/O流失相对Java程序而言,若是文件数据要流入Java程序,则为输入流,若流出Java程序,则为输出流!
客户端:文件先转化为输入流到程序,然后从Socket的实例化对象中获取输出流,把输入流读取并写入到输出流。
数据的上传读取都涉及数据I/O流,I/O流失相对Java程序而言,若是文件数据要流入Java程序,则为输入流,若流出Java程序,则为输出流!
客户端:文件先转化为输入流到程序,然后从Socket的实例化对象中获取输出流,把输入流读取并写入到输出流。
客户端:MainActivity.java public void onclick(View V){ Thread thread = new Thread(new Runnable(){ @Override public void run() { //获取文件的路径:此时图片文件是存储在SD卡上的 File file = new File("sdcard/hou.jpg"); try { //创建Socket对象,指定IP地址和端口号(IP地址请修改为自己电脑IP) Socket socket = new Socket("192.168.1.101",54321); //把文件放到输入流里面 InputStream is = new FileInputStream(file); //从socket中获取OutputStream OutputStream outputStream =socket.getOutputStream(); //定义一个存储输入流的字节数组buffer byte []buffer = new byte[4*1024]; int temp = 0; //把InputStream读取并循环写入到OutputStream中 while((temp = is.read(buffer))!=-1){ outputStream.write(buffer,0,temp); } outputStream.flush(); //关闭流和socket套接字; is.close(); outputStream.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } }); thread.start(); } 服务器端代码: package ay.lipengfei.socket; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; public class Socket implements Runnable { /** * @param args */ public static void main(String[] args) { Thread desktopServerThread = new Thread(new Socket()); desktopServerThread.start(); } public void run(){ try { ServerSocket serverSocket = new ServerSocket(54321); while(true){ System.out.println("等待用户连接"); //接受用户请求; java.net.Socket client =serverSocket.accept(); System.out.println("有新用户连接服务器"); //接收传来的流数据放入输入流; InputStream is = client.getInputStream(); //新new一个FileOutputStream对象,并把输入流输读写到这个输出流中生成新文件,读写操作同客户端。 FileOutputStream fos = new FileOutputStream("D:/hou1.jpg"); byte[] buffer = new byte[1024]; while(true){ int temp = is.read(buffer,0,buffer.length); if(temp==-1) break; fos.write(buffer,0,temp); } fos.close(); System.out.println("读写完成!"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- 常见http状态码详解
- 使用RNN解决句子对匹配问题的常见网络结构
- nginx支持负载均衡及https安装配置
- TCP/IP、UDP、Http、Socket的区别
- http协议返回状态值及意义
- 网络管理
- 神经网络之BP神经网络
- screen命令详解
- hdu 1532 网络流-最大流 DINIC
- 【Win 10 应用开发】TCP通信过程
- 大并发下TCP链接的内存消耗优化小记(80万并发业务正常服务)
- unix 网络编程 头件下载安装
- 深度卷积网络CNN与图像语义分割
- centos下网络配置方法(网关、dns、ip地址配置)
- 机器学习算法汇总:人工神经网络、深度学习及其它
- 如何控制开放HTTPS服务的weblogic服务器
- Tomcat配置https及访问http自动跳转至https
- Android操作HTTP实现与服务器通信
- 浅析php curl_multi_*系列函数进行批量http请求
- 创建 XMLHttpRequest 对象编写一个标准的函数