11

您好,我正在开发一个 android 应用程序,该应用程序需要通过 wifi 向 PC 发送一个字符串,从而模拟键盘按键。有什么想法可以完成这项任务吗?

4

6 回答 6

29

您必须在 PC 上编写服务器程序并使用 ServerSocket 接受来自 Android 手机的连接并为使用常规套接字(与 PC 端具有相同端口)编写线程,然后使用 DataInputStream 和数据输出流。您还需要打开 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();
于 2012-04-30T18:54:31.670 回答
2
  1. 沟通部分相当容易。在 PC 上打开 TCP 服务器,并让 Android 设备上的 TCP 客户端向其发送字符串/命令。可以在此处找到一个不错的教程,但您需要根据需要对其进行修改。

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

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

于 2012-04-30T17:59:32.913 回答
1

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

以下是肥皂标准的 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;
            }
       }
   }
于 2016-02-28T06:50:31.423 回答
0

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

于 2012-04-30T17:57:29.963 回答
0

您可能必须为 PC 编写某种程序,作为 Android 应用程序通过 Socket 或 Stream 发送到的“服务器”。

于 2012-04-30T17:58:34.723 回答
0

一个很好的实用且简单的方法,有很多社区,是使用 RabbitMQ。我将它用于我的项目并发送字符串 https://www.rabbitmq.com/getstarted.html

一旦你学习了基础知识,你将能够将项目扩展到更多的东西。原则上,教程 1 足以发送和接收字符串。

按照服务器安装说明打开请求的端口或使用 docker。

如果你想在 android-server 中获得更多 RabbitMQ 的东西,可以问我。

于 2021-11-22T14:43:53.557 回答