博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于TCP和多线程实现无线鼠标键盘-Socket(1)
阅读量:6470 次
发布时间:2019-06-23

本文共 2644 字,大约阅读时间需要 8 分钟。

把手机作为移动鼠标、键盘使用非常方便,本文将实现这一功能。该应用分为两部分:Windows服务端和Android客户端。

本文源代码的下载地址:。

Windows服务端的工程目录如下:

fMain是服务端的主界面,tListen是服务端的监听线程,tReceive是服务端的接收线程。

Android客户端的工程目录如下:

MainActivity是客户端的主Activity,ConnectThread是客户端的连接线程,SendThread是客户端的发送线程。

Java语言的通信有Socket(套接字)和HTTP两种方式,其中Socket(套接字)又分为TCP和UDP。TCP是面向连接的、可靠的通信方式,UDP是无连接的通信方式。

TCP通信方式的服务端采用ServerSocket进行监听,客户端采用Socket发出连接请求。当ServerSocket收到连接请求时,调用accept()方法返回一个Socket和客户端的Socket建立连接并通信。

本文采用TCP实现了Android移动设备和Windows计算机的连接,计算机作为服务器端监听,移动设备作为客户端,向计算机发出连接请求。

Windows端监听线程tListen.java的代码如下:

import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;public class tListen extends Thread{		public static ServerSocket ssct_server;	public static Socket sct_server;	public static InetAddress ip_server;	public static Integer pt_server;		// 线程变量	public static tReceive t_receive;		// 本机IP和PORT	public tListen(InetAddress ip, int port){				this.ip_server = ip;		this.pt_server = port;			}		public void run(){		// 开始监听		try		{			fMain.l_status.setText("状态:正在监听客户端......");			ssct_server = new ServerSocket(pt_server,2,ip_server);			sct_server = ssct_server.accept();			fMain.l_status.setText("状态:已经连接上客户端!");			fMain.set_btn(0, 1);			// 启动接收线程			t_receive = new tReceive(sct_server); 			t_receive.start();		}		catch (Exception e0)		{			fMain.l_status.setText("错误:" + e0);			if (ssct_server != null)				try				{					ssct_server.close();				}				catch (Exception e1)				{					fMain.l_status.setText("错误:" + e1);				}		}			}}

ssct_server = new ServerSocket(pt_server,2,ip_server)监听ip_server地址的pt_server端口,当收到客户端的连接请求时,sct_server = ssct_server.accept()接受连接请求,并返回一个socket和客户端通信。

Android端连接线程ConnectThread.java的代码如下:

package com.hzhi.mouse_mb;import java.net.Socket;import android.os.Bundle;import android.os.Message;import android.widget.Toast;public class ConnectThread extends Thread{		public static Socket socket_client;	public static String ip_server;	public static int port_server;		// 消息变量	private Message msg;	private Bundle bdl;		public ConnectThread(String ip, int pt){				this.ip_server = ip;		this.port_server = pt;			}	public void run(){				try		{			socket_client = new Socket(ip_server, port_server);			send_message(MainActivity.msg_con_stop, "");					}		catch(Exception e)		{			 send_message(MainActivity.msg_error, e.getMessage());		}			}		// 发送消息(用于更新UI)	public void send_message(int x, String s){				msg = new Message();		bdl = new Bundle();			bdl.putString("1",s);		msg.what = x;		msg.setData(bdl);			MainActivity.main_handler.sendMessage(msg);			}	}

socket_client = new Socket(ip_server, port_server)向地址为ip_server、端口为port_server的服务器发出连接请求,如连接成功,使用socket_client和服务器的Socket进行通信。

转载地址:http://hpcko.baihongyu.com/

你可能感兴趣的文章
App里面如何正确显示用户头像
查看>>
DATAGUARD维护:从库宕机后如何恢复到管理恢复模式
查看>>
U-BOOT之一:BootLoader 的概念与功能
查看>>
我的路上
查看>>
Velocity处理多余空白和多余空白行问题
查看>>
java值传递
查看>>
DB2与oracle有什么区别
查看>>
创建一个多级文件目录
查看>>
Picasa生成图片幻灯片页面图文教程
查看>>
js获取当前时间的前一天/后一天
查看>>
Python字符串的格式化
查看>>
C#反射---属性
查看>>
服务器常用的状态码及其对应的含义如下
查看>>
zoom和transform:scale的区别
查看>>
幸福框架:可扩展的、动态的、万能的 编号生成器
查看>>
黄聪:PHP 防护XSS,SQL,代码执行,文件包含等多种高危漏洞
查看>>
svn status 显示 ~xx
查看>>
常用HiveQL总结
查看>>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>