您的位置:首页 > 移动开发 > Android开发

[开源]Android手机控制电脑----服务器端

2013-05-25 12:04 393 查看
首先是要有一个服务器端 开启端口监听 界面如下



输入端口号 点击开启 即可实现端口的监听

public void run(){
try {
//创建一个DatagramSocket对象,并指定监听的端口号
DatagramSocket socket;
try{
socket = new DatagramSocket(port);
}catch(Exception e){
messagebox.setText("端口被使用,请更换端口");
startbutton.setEnabled(true);
stopbutton.setEnabled(false);
menux=0;
field.setEditable(true);
return;
}
byte data [] = new byte[1024];
//创建一个空的DatagramPacket对象
DatagramPacket packet = new DatagramPacket(data,data.length);
//使用receive方法接收客户端所发送的数据
System.out.println("开启端口监听"+socket.getLocalPort());

while(true){
socket.receive(packet);
message = new String(packet.getData(),packet.getOffset(),packet.getLength());
//					System.out.println("message--->" + message);
messagebox.setText(message);

messages = message.split(":");
if(messages.length>=2){
type= messages[0];
info= messages[1];
if(type.equals("mouse"))
MouseMove(info);
if(type.equals("leftButton"))
LeftButton(info);
if(type.equals("rightButton"))
RightButton(info);
if(type.equals("mousewheel"))
MouseWheel(info);
if(type.equals("keyboard"))
KeyBoard(info);
}

}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


使用DatagramSocket socket = new DatagramSocket(port);创建一个UDP的端口

通过while(true) { socket.receive(packet); } 实现端口的一直监听

通过message = new String(packet.getData(),packet.getOffset(),packet.getLength()); 接收客户端传来的信息 解析为一个字符串

手机端发送的信息 由 type:info 组成 比如 我们想要实现鼠标左击 发送 leftButton:click 这个字符串

服务器段 解析这个字符串后 根据type:info 把messages = message.split(":"); 分解为type 和 info两部分

if(type.equals("leftButton")) LeftButton(info);

public void LeftButton(String info) throws AWTException{
java.awt.Robot robot = new Robot();
if(info.equals("down"))
robot.mousePress(InputEvent.BUTTON1_MASK);
else if(info.equals("release"))
robot.mouseRelease(InputEvent.BUTTON1_MASK);
else if(info.equals("up"))
robot.mouseRelease(InputEvent.BUTTON1_MASK);
else if(info.equals("click")){
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
}


根据不同的info 分别调用 鼠标的左键的 down or up 或者是down and up

其它的比如 鼠标的移动 右键 滑轮 的操作思路 都一样

鼠标的移动是根据当前鼠标的左边 位置 进行加减计算

PointerInfo pinfo = MouseInfo.getPointerInfo();		//得到鼠标的坐标
java.awt.Point p = pinfo.getLocation();
mx=p.getX();	//得到当前电脑鼠标的坐标
my=p.getY();
java.awt.Robot robot;
try {
robot = new Robot();
//				System.out.println(mx+","+my);
//				System.out.println(px+","+py);
robot.mouseMove((int)mx+(int)px,(int)my+(int)py);
} catch (AWTException e) {
e.printStackTrace();
}


还有比如聊天功能 实现手机文字的输入 能发送到电脑的聊天框中

当时是朋友给的思路 感觉非常巧妙 手机发送过来的文字 放在粘贴板中 然后调用粘贴功能 就行了

通过 keyboard:message,内容,xxx

String args[]=info.split(",");
String type=null;
String cont=null;
String keystate =null;
java.awt.Robot robot = new Robot();
if(args.length==2){
type = args[0];
cont = args[1];
}
if(args.length==3){
type = args[0];
cont = args[1];
keystate = args[2];
}

if(type.equals("message")){
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
cb.setContents(new StringSelection(cont), null);//调用粘贴板

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_V);
}


type等于keyboard info由message,内容,xxx三部分组成 如果info第一部分是message

就调用系统的粘贴板 把发来的内容复制在粘贴板中 再调用系统的 CTRL+V 把内容给粘贴出来

就可以实现聊天内容的发送了

另外控制台信息的输入 不是CTRP+V 是鼠标右键+P

-------------------------------------------------------------------------

注:由于当时水平有限 代码写的不规范 很多地方都是想到了 随手写的 所以请见谅

下载地址:http://download.csdn.net/detail/lujianing2011/5447591
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: