当前位置:编程学习 > JAVA >>

Android TCP断开后才显示数据 《疯狂Android》网络应用错误

package org.crazyit.net;

import java.io.OutputStream;
import java.net.Socket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MultiThreadClient extends Activity {

//定义变量
EditText input,show;
Button send;
OutputStream os;
Handler handler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //变量赋值
        input=(EditText)findViewById(R.id.input);
        send=(Button)findViewById(R.id.send);
        show=(EditText)findViewById(R.id.show); 
        Socket s;
        handler=new Handler(){
         @Override
         public void handleMessage(Message msg){
         //如果消息来自子线程
         if (msg.what==0x123) {
show.append("\n"+msg.obj.toString());
}
         }
        };
        try {
s=new Socket("192.168.0.18",4005);
//客户端启动线程,不断接受来自服务端的数据
new Thread(new ClientThread(s,handler)).start();
os=s.getOutputStream();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
        
        send.setOnClickListener(new OnClickListener()
        {
         @Override
         public void onClick(View v){
         try {
         String stJson="{'IMEI': '460036041092409', 'Account': 'z','Password': '123','AlarmType':'GsmStop',"
+"'StartTime': '2013-02-08 01:34:00','EndTime': '2013-03-09 01:34:00',"
+"'Net':'DLBSCBA','Recovered':'No'}";
         //写入网络
os.write((stJson+"\r\n").getBytes("UTF-8"));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
         }
        
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    
}

package org.crazyit.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

import android.os.Handler;
import android.os.Message;
import android.widget.Toast;

public class ClientThread implements Runnable{

private Socket s;
private Handler handler;
BufferedReader br=null;
public ClientThread (Socket s,Handler handler) throws IOException {
this.s=s;
this.handler=handler;
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
String content=null;
while ((content=br.readLine())!=null) {
Message msg = new Message();
msg.what=0x123;
msg.obj=content;
handler.sendMessage(msg);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

}


android 网络应用 tcp --------------------编程问答-------------------- 就是每次都需要服务端断开连接,然后客户端才显示服务端发送的数据。 --------------------编程问答-------------------- 106行到110行之间为客户端线程的接收,但是服务端发送的数据不能实时接收,只能退出然后才能接收到数据。不知道为什么,我利用的是一些TCP调试的软件:TCP&UDP调试助手做的服务端。请大侠给点指点。 --------------------编程问答-------------------- 加上os.flush()和os.close() --------------------编程问答--------------------
引用 3 楼 fangmingshijie 的回复:
加上os.flush()和os.close()

是客户端收不到数据哦。不是发布出去数据。
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,