您的位置:首页 > 理论基础 > 计算机网络

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

2013-11-28 22:51 316 查看
在(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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: