如何通过 Android 套接字获取输入的字符到 java 服务器

How to obtain typed character to java server through Android socket

我正在 android 上创建 Remote PC 应用程序。我已经编写了一个代码来获取按下的键的 keyunicode,如下所示

AndroiClient.java

public boolean dispatchKeyEvent(KeyEvent event) {
    if(event.getAction()==KeyEvent.ACTION_DOWN){
            int keyUniCode=event.getUnicodeChar(event.getMetaState());
            if(keyUniCode!=0){
                char charCode=(char) keyUniCode;
                Log.i("Code:",""+keyUniCode);
                SendMessage msg=new SendMessage(charCode);
                msg.execute();
            }
    }
    return super.dispatchKeyEvent(event);
}

java 服务器使用 PrintWriter 对象接收 iti。

JavaServer.java

public class KeyListener {

private Robot robot;
private static Socket client;
private static ServerSocket server;
private static InputStreamReader inputStreamReader;
private static BufferedReader bufferedReader;
private static String message;
private static KeyListener keyboard;
public static void main(String... args) throws Exception {
    keyboard = new KeyListener();
    server=new ServerSocket(6666);
    System.out.println("Waiting");
    while(true){
        client=server.accept();
        System.out.println("Accepted");
        inputStreamReader=new InputStreamReader(client.getInputStream());
        bufferedReader=new BufferedReader(inputStreamReader);
        message=bufferedReader.readLine();
        System.out.println(message);
        keyboard.type(message);
    }
}

public KeyListener() throws AWTException {
    this.robot = new Robot();
}

public KeyListener(Robot robot) {
    this.robot = robot;
}

public void type(CharSequence characters) {
    int length = characters.length();
    for (int i = 0; i < length; i++) {
        char character = characters.charAt(i);
        type(character);
    }
}

class MyException extends IllegalArgumentException{
    public MyException(String message) {
        super(message);
    }
}

public void type(char character) {
    switch (character) {
    case 'a': doType(VK_A); break;
    case 'b': doType(VK_B); break;
    case 'c': doType(VK_C); break;
    case 'd': doType(VK_D); break;
    case 'e': doType(VK_E); break;
    .
    .
    .
    .//other cases
    .
    .
    .
    case '\n': doType(VK_ENTER); break;
    .
    .
    .
    .//other cases
    .
    default:
        throw new MyException("Cannot type character " + character);
    }
}

private void doType(int... keyCodes) {
    doType(keyCodes, 0, keyCodes.length);
}

private void doType(int[] keyCodes, int offset, int length) {
    if (length == 0) {
        return;
    }

    robot.keyPress(keyCodes[offset]);
    doType(keyCodes, offset + 1, length - 1);
    robot.keyRelease(keyCodes[offset]);
}
}

现在面临的问题是 Enter 和 Backspace 键在 android 中不生成任何 Unicode。那么我怎样才能获得 java

的 Enter 和 BacSpace 按键

这些方面的内容应该有所帮助

public boolean dispatchKeyEvent(KeyEvent event) {
    if(event.getAction()==KeyEvent.ACTION_DOWN){
        if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
            SendMessage msg = new SendMessage(some identifier for enter);
        } else if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
            SendMessage msg = new SendMessage(some identifier for delete);
        } else {

            int keyUniCode=event.getUnicodeChar(event.getMetaState());
            if(keyUniCode!=0){
                char charCode=(char) keyUniCode;
                Log.i("Code:",""+keyUniCode);
                SendMessage msg=new SendMessage(charCode);
                msg.execute();
            }
        }
    }
    return super.dispatchKeyEvent(event);
}