zoukankan      html  css  js  c++  java
  • 基于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。

  • 相关阅读:
    微信公众平台开发入门教程
    Android中自定义View和自定义动画
    asp.net实现大视频上传
    网页大文件上传解决方案
    php大文件上传解决方案
    asp.net大文件上传解决方案
    asp.net上传超大文件
    JSP上传整个文件夹
    超大文件上传方案(PHP)
    超大文件上传方案(ASP.NET)
  • 原文地址:https://www.cnblogs.com/mstk/p/3448638.html
Copyright © 2011-2022 走看看