详情见测试代码socket,可使用框架EasySocket,AndroidAsync
参考 https://blog.csdn.net/carson_ho/article/details/53366856
/**
* 连接服务器
*/
private void connection() {
try {
// 步骤1:连接服务器
socket =new Socket(HOST, PORT);
// 步骤2:创建输入流对象InputStream //接收消息的流对象
mBufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
//发送消息的流对象
mPrintWriter =new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
}catch (IOException ex) {
ShowDialog("连接服务器失败:" + ex.getMessage());
}
}
//使用PrintWriter发送消息
btn_send.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
final String msg =ed_msg.getText().toString();
if (socket.isConnected()) {//如果服务器连接
if (!socket.isOutputShutdown()) {//如果输出流没有断开
new Thread(new Runnable() {//发送消息要在子线程
@Override
public void run() {
mPrintWriter.println(msg);//点击按钮发送消息
}
}).start();
ed_msg.setText("");//清空编辑框
}
}
}
});
//启动线程,连接服务器,并用死循环守候,接收服务器发送过来的数据
mThread =new Thread(new Runnable() {
@Override
public void run() {
connection();// 连接到服务器
try {
while (mWorking) {//死循环守护,监控服务器发来的消息
if (!socket.isClosed()) {//如果服务器没有关闭
if (socket.isConnected()) {//连接正常
if (!socket.isInputShutdown()) {//如果输入流没有断开
// 步骤3:通过输入流读取器对象 接收服务器发送过来的数据
String mLine;
if ((mLine =mBufferedReader.readLine()) !=null) {//读取接收的信息
mLine +="\n";
Message message =new Message();
message.obj = mLine;
mHandler.sendMessage(message);//通知UI更新
}else {
}
}
}
}
}
}catch (Exception e) {
e.printStackTrace();
}
}
});
mThread.start();
网友评论