繁体   English   中英

如何使用服务器管理请求 - 响应对话框的循环

[英]How to manage loop of request-response dialog with server

我正在编写一个简单的客户端 - 服务器系统,问题是:如何构建我的客户端代码以使POST请求响应在循环中工作?

目前它看起来像这样(现在它不是一个循环):

  1. 打开HttpURLConnection
  2. 设置属性
  3. setDoOutput(真)
  4. 写入输出流
  5. 关闭输出流
  6. 新的DataInputStream
  7. 阅读回应
  8. 退出方法

我不确定在下一次迭代中我需要保存哪些对象以及应该关闭哪些对象。

你需要保存连接对象,你应该使用setDoInput(true)来读取数据,但如果你只想读取responseCoderesponseMessage你就不需要InputStream 检查下面的代码。

HttpURLConnection connection =(HttpURLConnection)new URL("url").openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-type", "text/xml"); // depend on you
connection.setRequestProperty("Accept", "text/xml, application/xml"); // depend on you
connection.setRequestMethod("POST");
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
writer.write(yaml);
writer.close();
int statusCode = connection.getResponseCode();
String message = connection.getResponseMessage();

对于InputStreamReader

connection.setDoInput(true);
InputStreamReader reader =  new InputStreamReader(connection.getInputStream());
char[] cbuf = new char[100];
reader.read(cbuf); 
// there are 3 read method you can choose as per your convenience 
//and put a check for end of line in while loop for reading whole content. 
reader.close();

在管理我自己关于这个主题的“研究”之后(感谢谷歌和诺基亚开发者论坛),我已经看到了我的代码的最终视图。 这是一个文件上传循环:

path = Paths.get(requestString);
in = Files.newInputStream(path);

int i = 0;
while ((bytesRead = in.read(buf)) != -1) { 
    URL u = new URL(defaultURL);
    huc = 
        (HttpURLConnection) u.openConnection();
    huc.setRequestMethod("POST");
    huc.setDoOutput(true);
    huc.setDoInput(true);

    os = huc.getOutputStream();
    os.write(buf, 0, bytesRead);
    os.flush();
    os = null;

    // thanks to dku.rajkumar for the following block of code ! 
    InputStreamReader reader =  
        new InputStreamReader(huc.getInputStream());
    char[] cbuf = new char[400];
    reader.read(cbuf);
    reader.close();

    String s = new String(cbuf);
    messagebuffer.append(s + "\n\n");

    huc.disconnect();

    Thread.sleep(16);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM