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

本文源代码的下载地址:http://download.csdn.net/detail/k_c_u_f/6673245。

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和PORTpublic 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进行通信。

转载于:https://www.cnblogs.com/mstk/p/3448379.html

基于TCP和多线程实现无线鼠标键盘-Socket(1)相关推荐

  1. 基于TCP和多线程实现无线鼠标键盘-Socket(2)

    在(1)中,实现了Windows服务端与Android客户端的连接,本节将实现在Windows服务端与Android客户端之间传递数据. Android客户端的发送线程SendThread.java代 ...

  2. 基于TCP和多线程实现无线鼠标键盘-GestureDetector

    为了实现无线鼠标,需要识别出用户在手机屏幕上的滑动动作,这就需要用到GestureDetector类. 首先是activity_main.xml: <LinearLayout xmlns:and ...

  3. c语言tcp多线程聊天,基于tcp和多线程的多人聊天室-C语言

    之前在学习关于网络tcp和多线程的编程,学了知识以后不用一下总绝对心虚,于是就编写了一个基于tcp和多线程的多人聊天室. 具体的实现过程: 服务器端:绑定socket对象->设置监听数-> ...

  4. Linux下基于TCP的简易文件传输(socket编程)

    Linux下基于TCP的简易文件传输(socket编程) OSI和TCP/IP: 关于TCP/IP协议 关于TCP协议 TCP编程的一般步骤[^2] TCP文件传输实现 功能概述 服务器编程 客户端编 ...

  5. Android中基于TCP协议的网络通信之使用Socket进行通信

    TCP协议被称为一种端到端的协议.这是因为它为两台计算机的连接起到了重要作用:当一台计算机需要与另一台计算机进行接连时,TCP协议会他们之间建立一个连接:用于发送和接收数据的虚拟链路. TCP协议负责 ...

  6. socket网络编程 java_Java Web 基础(一) 基于TCP的Socket网络编程

    一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...

  7. Java Socket编程 - 基于TCP方式的二进制文件传输【转】http://blog.csdn.net/jia20003/article/details/8248221...

    此人博客挺好的,推荐一个! 一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实 ...

  8. Java Socket编程 - 基于TCP方式的二进制文件传输

    一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实现主要功能有以下几点: 1. ...

  9. JAVA Socket 底层是怎样基于TCP/IP 实现的???

    首先必须明确:TCP/IP模型中有四层结构:       应用层(Application Layer).传输层(Transport  Layer).网络层(Internet Layer  ).链路层( ...

最新文章

  1. SystemTap工具的使用基础
  2. Flink从入门到精通100篇(十一)-Java SPI 机制在 Flink SQL 中的应用
  3. android universal-image-loader的使用
  4. 智能家居 (5) —— LD3320语音模块二次开发
  5. 【EPS精品教程】基于DOM和DSM创建垂直模型、加载垂直模型
  6. python编程格式化输出_Python的三种格式化输出
  7. kafka topic 目录存放在哪_Kafka系列文章之安装测试-第2篇
  8. 计算机安装系统后鼠标无法使用,电脑重装系统后鼠标键盘不能用怎么办,鼠标键盘不能用解决方法...
  9. 微型计算机系统有三类总线它们是,《微机原理、汇编语言与接口技术》韩晓茹(习题解答全套...
  10. 使用计算机时什么是死机,电脑死机的原因是什么,电脑死机怎么办? - 电脑死机的原因 电脑死机怎么办 - 安全专题...
  11. 2021年7月国产数据库排行榜:openGauss高歌猛进,GBase丢失第五
  12. 路由器级联方式(二级路由为例)
  13. A股实践 :图神经网络与新闻共现矩阵策略(附代码)
  14. 有关iot相关参考书籍的介绍
  15. spd耗材管理流程图_医用耗材SPD管理模式详解
  16. linux 服务进程管理,进程管理和系统服务-Linux学习笔记
  17. 弹窗代码大全window.open
  18. 计算机软件著作权用户手册资料,请问一下计算机软件著作权登记里的使用手册有没有什么要求,可以是大量图片加少量文字吗?我只写了20页- 法律快车法律咨询...
  19. 用友U8CO接口开发方式之映射(二)
  20. 28星之......奎

热门文章

  1. MySQL Date and Time Types(日期和时间格式)
  2. java kotlin相互调用_Kotlin的互操作——Kotlin与Java互相调用
  3. 云服务器 ECS > 安全 > 实例RAM角色 > 概述
  4. Java基础学习总结(139)——Java8 Stream之Stream接口入门简介
  5. Docker学习总结(20)——Docker 容器实践精华问答集锦
  6. Java基础学习总结(37)——Java23中设计模式(Design Patterns)详解
  7. api 定位 微信小程序 精度_微信小程序城市定位(百度地图API)
  8. Android中你可能忽略的知识点(1)-分辨率那些事
  9. PHP中文字符串截取类
  10. Python2.7 logging.config logging.handlers