2012-10-14 45 views
5

Tôi đang phát triển một ứng dụng Android sử dụng TCP để kết nối thiết bị. Vấn đề là tôi mới lập trình socket. Tôi đã tạo thành công một mã máy chủ và máy khách. Mỗi khách hàng có thể kết nối với máy chủ và máy chủ có thể trả lời khách hàng. Nhưng tôi không thể làm cho máy chủ gửi tin nhắn đến tất cả các khách hàng được kết nối cùng một lúc. Các bước để làm cho máy chủ phát sóng một tin nhắn cho khách hàng là gì? Đây là mã máy chủ:Máy chủ Android TCP phát sóng

ServerSocket server = null; 
try { 
    server = new ServerSocket(9092); // start listening on the port 
} catch (IOException e) { 
    Log.d("btnCreate onClick", "Could not listen on port: 9092"); 
} 
Socket client = null; 
while(true) { 
    try { 
     client = server.accept(); 
    } catch (IOException e) { 
     Log.d("btnCreate onClick", "Accept Failed"); 
    } 
    //start a new thread to handle this client 
    Thread t = new Thread(new ClientConn(client)); 
    t.start(); 
} 

Và thread server:

class ClientConn implements Runnable { 
    private Socket client; 

    ClientConn(Socket client) { 
     this.client = client; 
    } 

    public void run() { 
     BufferedReader in = null; 
     PrintWriter out = null; 
     try { 
      /* obtain an input stream to this client ... */ 
      in = new BufferedReader(new InputStreamReader(
         client.getInputStream())); 
      /* ... and an output stream to the same client */ 
      out = new PrintWriter(client.getOutputStream(), true); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return; 
     } 

     String msg; 
     try { 
      while ((msg = in.readLine()) != null) { 
       Log.d("ClientConn", "Client says: " + msg); 
       out.println(msg); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Bạn có thể giải thích ý bạn bằng cách "phát" trong ngữ cảnh của bạn không? TCP không phát sóng. –

+0

Đã chỉnh sửa câu hỏi của tôi. Tôi muốn máy chủ gửi tin nhắn đến tất cả các khách hàng được kết nối. Không phải nó được gọi là phát sóng? Tôi mới vào lập trình socket. –

Trả lời

4

TCP là một giao thức kết nối point-to-point. Điều này có nghĩa là khi bạn gửi tin nhắn trên ổ cắm, nó chỉ đi tới một bộ thu. Các giao thức IP khác như UDP có chế độ "phát sóng", trong đó một gói có thể đi tới nhiều máy thu, nhưng không có điều gì cho TCP.

Để máy chủ của bạn gửi cùng một thông điệp đến tất cả các máy khách, máy chủ sẽ phải gửi một tin nhắn trên mỗi socket cho từng máy khách.

+0

Vì vậy, tôi nên lưu trữ các IP của tất cả các khách hàng của tôi, và sau đó gửi tin nhắn cho tất cả chúng từng người một? Tôi nên đặt mã ở đâu? Trên ClientConn? –

+1

Bạn đã có một tay cầm socket mở cho mỗi máy khách theo mã bạn đã đăng (trong 'ClientConn'). Vì vậy, bạn chỉ cần một số cách để yêu cầu lớp đó gửi một thông báo trên ổ cắm 'client' của nó. –

+0

Ok, tôi sẽ cố gắng và cho bạn biết. Cảm ơn vì sự khai sáng. : D –

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