如何通过wifi将字符串从Android发送到PC

时间:2012-04-30 17:54:44

标签: android android-wifi onkeypress

您好我正在开发一个Android应用程序,它需要通过wifi向PC发送一个字符串,从而模拟键盘按键。任何想法如何才能完成这项任务?

5 个答案:

答案 0 :(得分:29)

您必须在PC上编写服务器程序并使用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();

答案 1 :(得分:1)

  1. 沟通部分相当容易。在PC上打开TCP服务器,在Android设备上安装TCP客户端,发送字符串/命令。 可能会找到一个很好的教程here,但您需要根据需要对其进行修改。

    请注意,在使用TCP时,不应该从主线程完成,而是从后台线程完成。一个好的方法是AsyncTask(当你到达那里时)。

  2. 另一部分是键盘模拟。为此,您需要使用java.awt.Robot类。

答案 2 :(得分:1)

根据您的Web服务器设计,您可以使用restful communication或soap,然后通过HTTP协议将数据发送到您的Web服务,并从中获得所需的答案。我已经为肥皂方法编写了一个asp web服务,我将在下面解释。

这是soap标准的java示例代码:

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

现在您只需要从适当的活动中调用此方法,然后让您的Web服务完成剩下的工作。 以下是C#语言中的示例Web服务:

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

答案 3 :(得分:0)

我无法为您提供完整的代码,但至少可以指导您朝着正确的方向前进。为此,您需要使用Sockets。现在,如果您在互联网上搜索,您将找到许多与此主题相关的文章和示例,指定Android。例如thisthis

答案 4 :(得分:0)

您可能不得不为PC编写某种程序,作为Android应用程序通过套接字或流发送的“服务器”。