我有一个简单的Http Server,由Python的BaseHTTPRequestHandler编写。 使用Java在Android中使用HttpClient编写的客户端。 我想将数据从python服务器推送到客户端java: 所以我尝试在服务器上进行一段时间的True循环,一些服务器的代码:
def do_POST(self):
# receive POST data from client
# ...
# Then I want to keep alive this connection
self.send_response(200)
while True:
self.send_response(200)
time.sleep(5)
And HttpClient and MultipartEntity for java Client:
protected String doInBackground() {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.0.104:8089");
MultipartEntity entity = new MultipartEntity();
entity.addPart("type", new StringBody("audio"));
byte []dataByte = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
entity.addPart("data", new ByteArrayBody(dataByte, "data"));
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
// Please see This log will never print because blocked above
Log.d("MainActivity", "Server response");
}
我希望在httpClient.execute()之后连续接收服务器的响应。 但是我在最后一个客户端被阻止,因为服务器上的While True循环。
我猜httpClient.execute()正在等待http套接字关闭? 你能帮我解决一下如何处理这种情况吗? 我已经搜索了推送技术,似乎长时间拉动是另一种推动方式。
但我认为推动是解决我情况的更好方法。
答案 0 :(得分:0)
我认为问题出在服务器端代码中,其中:
while True:
self.send_response(200)
time.sleep(5)
do_Post
方法是一个处理程序,self.send_response(200)只是设置HTTP状态;但它实际上并没有通过电线发送东西。而你永远都在那里。
我认为您应该完全检查您的应用,服务器端和客户端的架构(我可能错了,但DefaultHttpClient
并未弃用[1]?
您是否考虑过使用websockets:https://github.com/koush/android-websockets?