2012-02-13 32 views
8

Tôi đang cố tạo ứng dụng android giao tiếp với máy chủ cục bộ thông qua ổ cắm. Giao tiếp truyền các lệnh và dữ liệu đơn giản trong chuỗi bằng JSON. Khách hàng phải liên tục lắng nghe các tin nhắn đến từ máy chủ và cập nhật giao diện người dùng khi nhận được dữ liệu mới.Android nghe tin nhắn từ ổ cắm máy chủ

Vì vậy, tôi đã tạo một dịch vụ mạng là dịch vụ bị ràng buộc đang chạy ẩn. Từ hoạt động của tôi, tôi liên kết với dịch vụ và nhận một thể hiện của đối tượng dịch vụ. Đối tượng dịch vụ chứa các phương thức ví dụ cho phép tôi gửi các lệnh tới máy chủ.

Vấn đề của tôi là, làm thế nào để tôi cho phép dịch vụ liên tục nghe tin nhắn từ máy chủ mà không chặn khả năng gửi tin nhắn đến máy chủ?

private Socket socket = null; 
private PrintWriter out = null; 
private BufferedReader in = null; 

private Listener listener; 

private String host = "10.0.1.4"; 
private int port = 3000; 

public NetworkService() 
{ 
    try { 

     if (socket == null) 
     { 
     socket = new Socket(this.host, this.port); 
     out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 
     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     } 

     if(listener == null) 
     { 
      listener = new Listener(); 
      Thread thread = new Thread(listener); 
      thread.start(); 
     } 

     } catch (Exception e) { 
      // ... 
     } 
    } 
} 

public class Listener implements Runnable 
{ 

    @Override 
    public void run() { 

     try { 
      String line = null; 

      while((line = in.readLine()) != null) 
       { 
       // Do something. Never gets here 

       } 
      } catch (Exception e) { 
       // ... 
      } 

     } 

    } 
+0

Ý bạn là Wat. Bạn có muốn quá trình này được chạy khi ứng dụng đang chạy hoặc trong một khoảng thời gian nhất định hoặc khi ứng dụng ở chế độ im lặng (khi ứng dụng đang chạy nền) .... – Sniper

+0

Vâng, tôi cần dịch vụ này khả dụng bất cứ khi nào tôi đang sử dụng ứng dụng. Tôi cần để có thể gửi các lệnh chuỗi đơn giản đến máy chủ, và tôi cần để có thể nhận dữ liệu từ máy chủ. –

+0

Bạn có muốn nhận máy chủ biểu mẫu phản hồi cho đến khi kết thúc đơn đăng ký của mình hoặc trong một khoảng thời gian nhất định không .. – Sniper

Trả lời

4

Bạn có thể tạo trong một chuỗi Dịch vụ để nghe máy chủ. Chủ đề thứ hai là để gửi các lệnh. Sau đó, đối với dịch vụ của bạn, bạn nên tạo một chủ đề chính với trình xử lý trong đó. Trình xử lý này sẽ xử lý các thông điệp từ hai luồng này.

+0

Đây cũng là suy nghĩ đầu tiên của tôi. Tôi đã cố gắng để bắt đầu một thread mới trong constructor cho dịch vụ của tôi với một vòng lặp while chặn với một readline trên inputstream, tuy nhiên trong khi vòng lặp dường như chấm dứt ngay lập tức. Vui lòng xem các chỉnh sửa của tôi –

+0

Được rồi, vì vậy hãy xóa mọi thứ và thử lại phương pháp này. Bây giờ nó hoạt động. –

Các vấn đề liên quan