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


    在(1)中,实现了Windows服务端与Android客户端的连接,本节将实现在Windows服务端与Android客户端之间传递数据。

    Android客户端的发送线程SendThread.java代码:

    package com.hzhi.mouse_mb;
    
    import java.io.DataOutputStream;
    import java.net.Socket;
    
    import android.os.Bundle;
    import android.os.Message;
    import android.util.Log;
    
    public class SendThread extends Thread {
    	
    	public static Socket socket_client;
    	public static String str_mk;
    	
    	// DOS
    	DataOutputStream dos = null;
    	
    	// 消息变量
    	private Message msg;
    	private Bundle bdl;
    	
    	public SendThread(Socket skt){
    		
    		socket_client = skt;
    		
    	}
    	
    	public void set_str(String str){
    		
    		str_mk = str;
    		
    	}
    	
    	public void run(){
    		
    		try 
    		{
    			dos = new DataOutputStream(socket_client.getOutputStream());
    		} 
    		catch (Exception e) 
    		{
    			send_message(MainActivity.msg_error,e.toString());
    		}
    		
    		while(true){
    			
    			try
    			{
    				if(str_mk == null) 
    				{
    					continue;			      
    				}
    				else 
    				{
    					dos.writeUTF(str_mk);
    					Log.i("str_mk=", str_mk);
    					str_mk = null;
    				}
    			}
    			catch (Exception e) 
    			{
    				send_message(MainActivity.msg_error,e.toString());
    			}
    			
    		}
    		
    	}	
    	
    	// 发送消息(用于更新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);
    		
    	}
    
    }
    

    dos = new DataOutputStream(socket_client.getOutputStream())获得了一个DataOutputStream,socket_client.getOutputStream()获得了将数据写入socket_client的OutputStream,并将该OutputStream作为dos的OutputStream;在while(true)循环中,dos.writeUTF(str_mk),将字符串str_mk写入socket_client,发送给服务端的Socket。

    Windows服务端的接收线程tReceive.java代码:

    import java.io.DataInputStream;
    import java.net.Socket;
    
    public class tReceive extends Thread{
    
    	public static Socket sct;
    	String str_mk;
    	
    	public tReceive(Socket s) {
    		super("");
    		this.sct = s;
    	}
    	
    	public void run() {
    		
    		DataInputStream dis = null;
    		
    		try 
    		{
    			dis = new DataInputStream(sct.getInputStream());
    		} 
    		catch (Exception e) 
    		{
    			fMain.l_status.setText("错误:" + e);
    		}
    		
    	   while(true) 
    	   {
    		   
    		   try 
    		   {	    
    			   str_mk = dis.readUTF();  
    			   System.out.println("str_mk=" + str_mk);
    			   fMain.rbt_act(str_mk);
    		   } 
    		   catch (Exception e) 
    		   {
    			   fMain.l_status.setText("错误:" + e);
    		   }
    		   
    
    	   }
    	   
    	}
    	
    }
    

    dis = new DataInputStream(sct.getInputStream()) 获得了一个DataInputStream;sct.getInputStream()) 获得了sct的InputStream,并将该InputStream作为DataInputStream的InputStream;在while(true)循环中,dis.readUTF()读出sct中的数据,并赋值给字符串变量str_mk。

  • 相关阅读:
    Java 位运算
    Java 自增运算
    Java 变量命名规范
    Java 数据类型
    Java 环境配置
    SQL Server-语句类别、数据库范式、系统数据库组成(一)
    Socket连接时,端口是怎么分配的
    【转载】SQL执行计划
    前端页面播放 rtmp 流与 flv 格式视频文件
    C# Winform Soket 网络编程 多个客户端连接服务器并返回客户端操作请求
  • 原文地址:https://www.cnblogs.com/mstk/p/3448638.html
Copyright © 2020-2023  润新知