利用thread和handle可以实现了,利用TCP的客户端想android发送数据,然后显示在textview上,但是,我在android上发送数据部分,有点问题,不知道是怎么回事,没有反应额··请高手看下了,弄了一下午额有点乱啊····
其实我android发送数据主要加的就是这两个部分:send_btn.setOnClickListener(new Button.OnClickListener(){
     @Override
     public void onClick(View v) {
     tmp = senddata_et.getText().toString();
     send_flag = true;
     }});
if(send_flag == true){
byteBuffer = tmp.getBytes();//byte[] bs = str.getBytes();//将string转byte
outputStream.write(byteBuffer, 0, tmp.length());
System.out.println(new String(byteBuffer,0,tmp.length()));
send_flag = false;
Message m2 = new Message();
//消息的标记GUINOTIFIER在前面定义的
                    m2.what = tcp_server.SENDOK;
                   //传送消息
                    tcp_server.this.mHandler.sendMessage(m2);
}其他的部分代码没有问题的,下面是全部代码,希望有人可以看下:package com.FJICC.lzm;
import java.util.ArrayList;
import java.util.Enumeration;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.Socket;
import java.net.ServerSocket;import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class tcp_server extends Activity{

private Button serverStart_btn;
private Button serverStop_btn;
private TextView receivedata_tv;
private Button setport_btn;
private EditText senddata_et;
private Button send_btn;
public int PORT = 8080;
public Handler mHandler;
protected static final int GUINOTIFIER = 0x1234;
protected static final int SENDOK = 0x1235;
public String tmp;
public boolean send_flag = false;@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
Intent i =new Intent();
i.setClass(tcp_server.this,MainActivity.class);
startActivity(i);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tcpserver_main);

serverStart_btn=(Button)findViewById(R.id.btnStart);
serverStop_btn=(Button)findViewById(R.id.btnStop);
setport_btn=(Button)findViewById(R.id.btnSet);
send_btn=(Button)findViewById(R.id.btnSend);

senddata_et=(EditText)findViewById(R.id.et_send);
receivedata_tv=(TextView)findViewById(R.id.tv_receive); serverStart_btn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
serverStart_btn.setEnabled(false);
setport_btn.setEnabled(false);
serverStop_btn.setEnabled(true);

new Thread()
{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
ServerSocket serverSocket=null;
try{
serverSocket = new ServerSocket(PORT);//创建ServerSocket对象监听PORT端口
Socket socket= serverSocket.accept();//接收tcp连接返回socket对象
InputStream inputStream=socket.getInputStream();//获得输入流
OutputStream outputStream = socket.getOutputStream();//获得输出流
byte []byteBuffer=new byte[1024];
int temp = 0;
String s;
//读取接收到的数据
while((temp = inputStream.read(byteBuffer))!=-1)
{
outputStream.write(byteBuffer, 0, temp);//原样返回 收到的数据 

//将byte转为string//String(byte[], int, int)使用平台的缺省字符编码方式转换指定的字节子数组生成一新的 String 
s = new String(byteBuffer,0,temp);

//byte[] bs = str.getBytes();//将string转byte

Message m = new Message();//定义一个message的变量m
                    m.what = tcp_server.GUINOTIFIER;//消息的标记GUINOTIFIER在前面定义的
                    m.obj =s; //将要传送的数据传递给 m.obj                     
                    tcp_server.this.mHandler.sendMessage(m);//传送消息
}
if(send_flag == true){
byteBuffer = tmp.getBytes();//byte[] bs = str.getBytes();//将string转byte
outputStream.write(byteBuffer, 0, tmp.length());
System.out.println(new String(byteBuffer,0,tmp.length()));
send_flag = false;
Message m2 = new Message();
//消息的标记GUINOTIFIER在前面定义的
                    m2.what = tcp_server.SENDOK;
                   //传送消息
                    tcp_server.this.mHandler.sendMessage(m2);
}
//System.out.println(new String(byteBuffer,0,temp));
outputStream.flush();
socket.close();
serverSocket.close();
                                         
}catch(IOException e){
e.printStackTrace();
}
}
}.start();
}
}); //创建handler
mHandler = new Handler() {
            public void handleMessage(Message msg) {
                switch (msg.what) {//得到Handle的通知了 这个时候你可以做相应的操作
                    case tcp_server.GUINOTIFIER://tcp_server是Activity的类名       
                     //清空textView
                    // receivedata_tv.setText("");
                     //设置textView显示内容
                     receivedata_tv.setText(msg.obj.toString());
                        break;
                    case tcp_server.SENDOK:
                     senddata_et.setText("");
                }
                super.handleMessage(msg);
            }
        };
        //结束TCP服务器
        serverStop_btn.setOnClickListener(new Button.OnClickListener(){
     @Override
     public void onClick(View v) {
     serverStart_btn.setEnabled(true);
     setport_btn.setEnabled(true);
     serverStop_btn.setEnabled(false);
    
     Intent i =new Intent();
     i.setClass(tcp_server.this,MainActivity.class);
     startActivity(i);
     finish();
     }});
        send_btn.setOnClickListener(new Button.OnClickListener(){
     @Override
     public void onClick(View v) {
     tmp = senddata_et.getText().toString();
     send_flag = true;
     }});
    }
}在此先谢谢了啊~~~

解决方案 »

  1.   

    其实是想,弄一个TCP的服务器,可以收发数据的。不过在网上找的很多都是没有界面的那种,所以想自己弄一个额~~~呵呵
    现在就差这个的~~~
      

  2.   

    粗略一看 问题还是很大的  byteBuffer = tmp.getBytes();//byte[] bs = str.getBytes();//将string转byte
                                outputStream.write(byteBuffer, 0, tmp.length());你明明用了 byteBuffer   但是你居然调用tmp.length() 还有 while((temp = inputStream.read(byteBuffer))!=-1)
                                {
                                outputStream.write(byteBuffer, 0, temp);//原样返回 收到的数据 
                                 
                                //将byte转为string//String(byte[], int, int)使用平台的缺省字符编码方式转换指定的字节子数组生成一新的 String 
                                s = new String(byteBuffer,0,temp);                            
                                 
                                //byte[] bs = str.getBytes();//将string转byte                        
                                 
                                Message m = new Message();//定义一个message的变量m                            
                                m.what = tcp_server.GUINOTIFIER;//消息的标记GUINOTIFIER在前面定义的
                                m.obj =s; //将要传送的数据传递给 m.obj                            
                                tcp_server.this.mHandler.sendMessage(m);//传送消息
                                }在你还没有开始发送的时候估计你这个线程就已经结束了  这种用于接收的线程 应该 是个 “死循环” 这样才能一直接收啊