来自 新萄京娱乐手机版 2019-11-07 13:31 的文章
当前位置: 新萄京娱乐手机版 > 新萄京娱乐手机版 > 正文

基于TCP和多线程实现无线鼠标键盘

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

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

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

新萄京娱乐手机版 1

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

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

新萄京娱乐手机版 2

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

本文由新萄京娱乐手机版发布于新萄京娱乐手机版,转载请注明出处:基于TCP和多线程实现无线鼠标键盘

关键词: