socket中BufferedReader数据已经加载进去就是不在前台显示,中断服务器端才能在手机上显示

银河小分队5 发布于 2017/01/03 21:18
阅读 175
收藏 1
package com.example.myxu;



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

EditText ip=null;
EditText editText=null;
TextView text=null;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ip=(EditText) findViewById(R.id.ip);
editText=(EditText) findViewById(R.id.editText);
    text=(TextView) findViewById(R.id.textView2);

    findViewById(R.id.connect).setOnClickListener(new OnClickListener() {

public void onClick(View v) {
conncet();

}
});
    
    
    findViewById(R.id.send).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
send();
}
});
}

//------------------------------

Socket socket=null;
BufferedReader reader=null;
BufferedWriter writer=null;
//获得链接
public void conncet(){

AsyncTask<Void, String, Void> read=new AsyncTask<Void, String, Void>(){

@Override
protected Void doInBackground(Void... arg0 ) {
try { 
//建立连接
socket=new Socket(ip.getText().toString(),5000);
writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//作为onProgressUpdate()方法用
publishProgress("@success");
String line;

while ((line=reader.readLine())!=null) {
publishProgress(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;

}

@Override
protected void onProgressUpdate(String... values) {
if (values[0].equals("@success")) {
Toast.makeText(MainActivity.this, "socket链接成功", Toast.LENGTH_SHORT).show();
}
                                          //数据添加到手机上
text.append("服务器:"+values[0].toString()+"\n");
super.onProgressUpdate(values);
}
};

read.execute();


//发送内容
public void send(){
try {
writer.write(editText.getText().toString()+"\n");
text.append("我:"+editText.getText().toString()+"\n");
writer.flush();
//清空编辑框
editText.setText("");


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
有错误吗?下面是日志:
?:??: W/?(?): logcat read failure: Connection refused
: E/(): Device disconnected: 1
reander中有数据,但是不在手机端显示,必须关闭服务端,然后一下都显示出来。用了clone()无效!
请大神教教我吧
加载中
0
取个昵称咋这么难啊
取个昵称咋这么难啊
reader读数据,writer写数据,使用writer的flush()方法试试
0
睡不醒了睡
睡不醒了睡
能不能把格式加上!
0
0
秋痕
秋痕
writer  要 close() 哦
0
银河小分队5
银河小分队5
谢谢大家,其实是这样的。while ((line=reader.readLine())!=null) 有问题,服务器端没有传过来换行符,认识不了、\n\r,最后只用inputStream.reader()读
返回顶部
顶部