zoukankan      html  css  js  c++  java
  • 基于TCP和多线程实现无线鼠标键盘-Socket(1)

    把手机作为移动鼠标、键盘使用非常方便,本文将实现这一功能。该应用分为两部分: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和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进行通信。

  • 相关阅读:
    C++利用SOAP开发WebService
    C++中使用soap toolkit访问webService详解
    第一次课堂作业之Circle
    第四次作业(计算器第二步)
    第三次作业之Calculator项目随笔
    C++视频课程小结(3)
    C++视频课程小结(2)
    C++视频课程小结(1)
    第二次作业之视频课程题
    第二次作业之编程题
  • 原文地址:https://www.cnblogs.com/mstk/p/3448379.html
Copyright © 2011-2022 走看看