2012-04-30 4 views
8

Привет, я работаю над Android-приложением, которое требует отправки строки через Wi-Fi на ПК, что приводит к имитации клавиатурных клавиш. Все идеи, как я могу достичь этой задачи?Как отправить строку с Android на ПК через wifi

+0

Вы можете использовать эту ссылку [введите описание ссылки здесь] (http://stackoverflow.com/questions/10388250/how-to-send-string- from-android-to-pc-over-wifi? noredirect = 1 & lq = 1) –

+0

Извините, вы можете использовать эту ссылку: [введите ссылку здесь] (http://stackoverflow.com/questions/31611593/send-text- из-андроида к ПК-через-Wi-Fi-соединение?noredirect = 1 & lq = 1) –

ответ

28

Вы должны написать серверную программу на ПК и использовать ServerSocket, чтобы принять соединение и запись потока для вашего Android телефона, который использует обычный сокет (с тем же портом в конце PC) а затем управлять ими с помощью DataInputStream и DataOutputStream. Вам также необходимо открыть разрешения на вашем AndroidManifest.xml.

Для разрешения использовать это:

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

Для кода вот небольшой пример:

Сервер:

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(); 

Клиент:

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

ok Я сделал подключение к серверу сервера клиентов, и сервер уведомляет меня, если соединение установлено, но как я могу заставить клиента уведомить меня о соединении? –

+0

Вы можете использовать socket.isConnected() –

0

Я не могу предложить полный код, но, по крайней мере, поможет вам в правильном направлении. Для этого вам необходимо использовать Sockets. Теперь, если вы ищете в Интернете, вы найдете множество статей и примеров, связанных с этой темой, определяющими Android. Например, this и this.

+0

ok Я сделал подключение к серверу сервера клиентов, и сервер уведомляет меня, если соединение установлено, но как я могу заставить клиента уведомить меня о соединении? –

0

Возможно, вам придется написать какую-то программу для ПК, которая выступает в качестве «сервера» для приложения Android для отправки через Socket или Stream.

+0

ok Я сделал соединение сокета клиентского сервера, и сервер уведомляет меня, если соединение установлено, но как я могу заставить клиента уведомить меня о соединении? –

1
  1. Коммуникационная часть довольно проста. Откройте TCP-сервер на ПК и попросите TCP-клиент на устройстве Android отправить его Strings/Commands. Хорошее руководство можно найти here, но вам нужно будет его модифицировать для ваших нужд.

    Обратите внимание, что при работе с TCP это не должно делаться из основного потока, а из фонового потока. Хорошим методом для этого является AsyncTask (Когда вы туда доберетесь).

  2. Другая часть - симуляция клавиатуры. Для этого вам необходимо использовать класс java.awt.Robot.

+0

Спасибо, но мне также нужна строка, которая будет получена на ПК, будет ли мой компьютер действовать как сервер? как приложение Android и приложение для ПК будут общаться? –

+0

Это именно то, для чего нужны сокеты TCP. для обоих устройств. – MByD

+0

ok Я сделал соединение сокета клиентского сервера, и сервер уведомляет меня, если соединение установлено, но как я могу заставить клиента уведомить меня о соединении? –

1

на основе вашего веб-сайт erver design вы либо используете спокойную связь или мыло, а затем отправляете свои данные по протоколу HTTP на свой веб-сервис и получаете от него желаемый ответ. я написал веб-сервис asp для мыльного подхода, который я объясню ниже.

Вот ява пример кода для стандартного мыла:

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; 
} 

теперь вам просто нужно вызвать этот метод из соответствующей деятельности, и пусть ваш веб-сервис сделает все остальное. Вот пример веб-службы в 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; 
      } 
     } 
    } 
Смежные вопросы