2012-04-30 14 views
8

Xin chào tôi đang làm việc trên một ứng dụng Android yêu cầu gửi một chuỗi qua wifi đến máy tính dẫn đến việc mô phỏng phím nhấn. Ý tưởng của chúng tôi là tôi có thể đạt được nhiệm vụ này như thế nào?Làm thế nào để gửi chuỗi từ Android đến PC qua wifi

+0

Bạn có thể sử dụng liên kết này [nhập liên kết mô tả ở đây] (http://stackoverflow.com/questions/10388250/how-to-send-string- từ-android-to-pc-over-wifi? noredirect = 1 & lq = 1) –

+0

Xin lỗi Bạn có thể sử dụng liên kết này: [nhập mô tả liên kết tại đây] (http://stackoverflow.com/questions/31611593/send-text- từ-android-to-pc-via-wi-fi-kết nối?noredirect = 1 & lq = 1) –

Trả lời

28

Bạn sẽ phải viết một chương trình máy chủ trên máy tính và sử dụng một ServerSocket để chấp nhận một kết nối từ và viết một chủ đề cho điện thoại Android của bạn sử dụng một ổ cắm thông thường (với cổng giống như cuối PC) và sau đó quản lý chúng bằng cách sử dụng DataInputStream và DataOutputStream. Bạn cũng cần mở các quyền trên tệp AndroidManifest.xml của mình.

Đối với các điều khoản sử dụng này:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

Đối với mã ở đây là một ví dụ nhỏ:

Server:

String msg_received; 

ServerSocket socket = new ServerSocket(1755); 
Socket clientSocket = socket.accept();  //This is blocking. It will wait. 
DataInputStream DIS = new DataInputStream(clientSocket.getInputStream()); 
msg_received = DIS.readUTF(); 
clientSocket.close(); 
socket.close(); 

Chủ đầu tư:

Socket socket = new Socket("192.168.0.1",1755); 
DataOutputStream DOS = new DataOutputStream(socket.getOutputStream()); 
DOS.writeUTF("HELLO_WORLD"); 
socket.close(); 
+0

ok tôi đã thực hiện kết nối ổ cắm máy chủ khách hàng và máy chủ thông báo cho tôi nếu kết nối được thiết lập nhưng làm thế nào tôi có thể làm cho khách hàng thông báo cho tôi về kết nối? –

+0

Bạn có thể sử dụng socket.isConnected() –

0

Tôi không thể cung cấp cho bạn mã đầy đủ nhưng ít nhất có thể hướng dẫn bạn đi đúng hướng. Để đạt được điều này, bạn cần sử dụng Sockets. Bây giờ nếu bạn tìm kiếm trên Internet, bạn sẽ tìm thấy rất nhiều bài báo và ví dụ liên quan đến chủ đề này chỉ định Android. Ví dụ: thisthis.

+0

ok tôi đã thực hiện kết nối ổ cắm máy chủ khách và máy chủ thông báo cho tôi nếu kết nối được thiết lập nhưng làm thế nào tôi có thể làm cho máy khách thông báo cho tôi về kết nối? –

0

Có thể bạn sẽ phải viết một số loại chương trình cho PC hoạt động như một 'máy chủ' cho ứng dụng Android gửi qua Ổ cắm hoặc Luồng.

+0

ok tôi đã thực hiện kết nối ổ cắm máy chủ khách hàng và máy chủ thông báo cho tôi nếu kết nối được thiết lập nhưng làm thế nào tôi có thể làm cho máy khách thông báo cho tôi về kết nối? –

1
  1. Phần giao tiếp khá dễ dàng. Mở một máy chủ TCP trên máy tính, và có một TCP Client trên thiết bị Android gửi nó Strings/Lệnh. Một hướng dẫn hay có thể được tìm thấy here, nhưng bạn sẽ cần phải sửa đổi nó cho nhu cầu của bạn.

    Lưu ý rằng khi làm việc với TCP, nó không nên được thực hiện từ chuỗi chính, nhưng từ chuỗi nền. Một phương pháp tốt cho điều đó là AsyncTask (Khi bạn đến đó).

  2. Phần khác là mô phỏng bàn phím. Bạn cần sử dụng lớp java.awt.Robot.

+0

Cảm ơn nhưng tôi cũng cần chuỗi được nhận trên máy tính PC của tôi sẽ hoạt động như một máy chủ? ứng dụng android và ứng dụng PC sẽ giao tiếp như thế nào? –

+0

Đó chính xác là những gì các cổng TCP được sử dụng. cho cả hai thiết bị để giao tiếp. – MByD

+0

ok tôi đã thực hiện kết nối ổ cắm máy chủ khách hàng và máy chủ thông báo cho tôi nếu kết nối được thiết lập nhưng làm thế nào tôi có thể làm cho máy khách thông báo cho tôi về kết nối? –

1

dựa trên của bạn web s erver thiết kế bạn hoặc sử dụng giao tiếp hoặc xà phòng yên tĩnh và sau đó gửi dữ liệu của bạn qua giao thức HTTP đến dịch vụ web của bạn và nhận được câu trả lời mong muốn từ nó. tôi đã viết một dịch vụ web asp cho cách tiếp cận xà phòng mà tôi sẽ giải thích dưới đây.

Đây là java mã ví dụ cho chuẩn xà phòng:

private static String NameSpace = "http://tempuri.org/"; 
    //below url must be your service url, mine is a local one 
    private static String URL = "http://192.168.2.213/hintsservice/service.asmx"; 
    private static String SOAP_ACTION = "http://tempuri.org/"; 

    public static String Invoke(String s) { 
    //respond string from server 
    String resTxt = ""; 
    //the name of your web service method 
    final String webMethName = "Hint"; 
    // Create request 
    SoapObject request = new SoapObject(NameSpace, webMethName); 
    // Property which holds input parameters 
    PropertyInfo PI = new PropertyInfo(); 
    // Set Name 
    PI.setName("s"); 
    // Set Value 
    PI.setValue(s); 
    // Set dataType 
    PI.setType(String.class); 
    // Add the property to request object 
    request.addProperty(PI); 
    // Create envelope 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
      SoapEnvelope.VER11); 
    //Set envelope as dotNet 
    envelope.dotNet = true; 
    // Set output SOAP object 
    envelope.setOutputSoapObject(request); 
    // Create HTTP call object 
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    try { 
     // Invoke web servi.ce 
     androidHttpTransport.call(SOAP_ACTION + webMethName, envelope); 
     // Get the response 
     SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
     // Assign it to resTxt variable static variable 
     resTxt = response.toString(); 
    }catch (Exception e) { 
     //Print error 
     e.printStackTrace(); 
     //Assign error message to resTxt 
     resTxt = "Error occured"; 
    } 
    //Return resTxt to calling object 
    return resTxt; 
} 

bây giờ bạn chỉ cần gọi phương pháp này từ hoạt động thích hợp và để cho dịch vụ web của bạn làm phần còn lại. Đây là dịch vụ ví dụ web trong ngôn ngữ C#:

[WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService] 

    public class Service : System.Web.Services.WebService 
    { 
     public Service() { 
      //Uncomment the following line if using designed components 
      //InitializeComponent(); 
      [WebMethod] 
      public string Hint(string s) { 
       string response = string.Empty; 
       //todo: produce response 
       return response; 
      } 
     } 
    }