采用的开发环境是android studio 2.2 preview 7
下面是android聊天的服务器程序,客户端程序类似
package com.example.ict.chat_server;
import android.app.Activity;
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;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MainActivity extends Activity {
public static final int REFRESH = 0x000001;
private TextView number = null;
private TextView receive_text = null;
private TextView connect_state = null;
private EditText editText = null;
private Button button = null;
private int i = 0;
private Handler mHandler = null;
private static final int PORT = 5555;
Socket socket = null;
ServerSocket server = null;
BufferedReader reader;
PrintWriter writer = null;
char r_data[] = new char[100];
public static int connetct = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connect_state = (TextView)findViewById(R.id.connect_state);
number = (TextView) findViewById(R.id.number);
receive_text = (TextView)findViewById(R.id.receive_text);
editText = (EditText)findViewById(R.id.editText);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
writer.println(editText.getText());
writer.flush();
}
});
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == REFRESH) {
number.setText("收到信息数量"+i);
receive_text.setText(String.valueOf(r_data));
for(int i=0;i<100;i++)
{
r_data[i] = 0;
}
if(socket.isConnected()) {
connect_state.setText("已连接");
}
}
super.handleMessage(msg);
}
};
new MyThread().start();
}
public class MyThread extends Thread {
public void run() {
try
{
server = new ServerSocket(5555);
socket = server.accept();
reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream());
writer.println("Hello Client!");
writer.flush();
}catch(IOException e)
{
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted()) { //判断当前线程是否被打断了
Message msg = new Message();
msg.what = REFRESH;
if (connetct == 0) {
mHandler.sendMessage(msg);
connetct = 1;
} else if(connetct == 1)
{
try {
if(reader.read(r_data)>0)
{
i++;
}
} catch (IOException e) {
e.printStackTrace();
}
mHandler.sendMessage(msg);// 如果发Handler消息在获取数据以前,可能造成上方把读取数据设置为空,因为每次设置完更新数据都会把缓存r_data清零
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else {
}
}
}
}
}