欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

android 通过socket上传文件到服务器并返回数据,该如何解决

更新时间: 2014-01-05 02:35:43 责任编辑: Author_N1

 

android 通过socket上传文件到服务器并返回数据,急啊!!!
给大神是这样的,我在android上要通过socket上传一个文件和一些相关数据到服务器,然后我在服务器接收数据后并处理完成需要向android客户端返回一些相应数据,这些数据时通过PrintWriter  out = request.getWriter()  对象打印的。我在客户端怎么接收这些数据啊 ?

这是客户端发送文件的方法:
public static boolean postFileUseSocket(String path, Map<String, String> params, FormFile[] files) throws Exception{     
        final String BOUNDARY = "---------------------------7da2137580612"; //数据分隔线
        final String endline = "--" + BOUNDARY + "--\r\n";//数据结束标志
        
        int fileDataLength = 0;
        for(FormFile uploadFile : files){//得到文件类型数据的总长度
         StringBuilder fileExplain = new StringBuilder();
          fileExplain.append("--");
          fileExplain.append(BOUNDARY);
          fileExplain.append("\r\n");//-----------------------------7da2137580612
          fileExplain.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ uploadFile.getFilname() + "\"\r\n");
          fileExplain.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n");
          fileExplain.append("\r\n");
          fileDataLength += fileExplain.length();
         if(uploadFile.getInStream()!=null){
         fileDataLength += uploadFile.getFile().length();
      }else{
       fileDataLength += uploadFile.getData().length;
      }
        }
        StringBuilder textEntity = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet()) {//构造文本类型参数的实体数据
            textEntity.append("--");
            textEntity.append(BOUNDARY);
            textEntity.append("\r\n");
            textEntity.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");
            textEntity.append(entry.getValue());
            textEntity.append("\r\n");
        }
        //计算传输给服务器的实体数据总长度
        int dataLength = textEntity.toString().getBytes().length + fileDataLength +  endline.getBytes().length;
        
        URL url = new URL(path);
        
        
   



        int port = url.getPort()==-1 ? 80 : url.getPort();
        Socket socket = new Socket(InetAddress.getByName(url.getHost()), port);   
       // socket.setKeepAlive(true);
        OutputStream outStream = socket.getOutputStream();
        //下面完成HTTP请求头的发送
        String requestmethod = "POST "+ url.getPath()+" HTTP/1.1\r\n";
        outStream.write(requestmethod.getBytes());
        String accept = "Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n";
        outStream.write(accept.getBytes());
        String language = "Accept-Language: zh-CN\r\n";
        outStream.write(language.getBytes());
        String contenttype = "Content-Type: multipart/form-data; boundary="+ BOUNDARY+ "\r\n";
        outStream.write(contenttype.getBytes());
        String contentlength = "Content-Length: "+ dataLength + "\r\n";
        outStream.write(contentlength.getBytes());
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:35:43
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/11885/
本文WWW.DOC100.NET DOC100.NET版权所有。