先看看效果图:

实现思路
把MainActivity的Handler传递到SocketActivity,用于处理接受服务器传来的信息。
第一步 加权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
第二步 SocketActivity
package com.example.socket04.socket;
import android.os.Handler;
import android.os.Message;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
public class SocketActivity {
Socket socket = new Socket();
private final int HANDLER_MSG_TELL_RECV = 0x124;
private OutputStream outputStream = null;
/**
* 连接服务器并且监听
*
* @param handler
* @param host
* @param port
*/
public void startNetThread(final Handler handler, final String host, final int port) {
new Thread() {
@Override
public void run() {
try {
socket.connect(new InetSocketAddress(host, port), 3000);
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int n = inputStream.read(bytes);
while (true) {
Message msg = handler.obtainMessage(HANDLER_MSG_TELL_RECV, new String(bytes, 0, n));
msg.sendToTarget();
n = inputStream.read(bytes);
}
} catch (Exception e) {
}
}
}.start();
}
/**
* 异步发送信息
*
* @param data
*/
public void sendData(final String data) {
new Thread() {
@Override
public void run() {
try {
outputStream = socket.getOutputStream();
outputStream.write(data.getBytes());
outputStream.flush();
} catch (Exception e) {
}
}
}.start();
}
/**
* 断开连接
*/
public void closeSocket() {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
第三步 MainActivity
- 实例化对象
SocketActivity socketActivity = new SocketActivity();
- Handler
/**
* 接受到数据
*/
@SuppressLint("HandlerLeak")
Handler handler01 = new Handler() {
public void handleMessage(Message msg) {
tv_res.setText((msg.obj).toString());
}
};
- 连接服务器
socketActivity.startNetThread(handler01, host, port); //链接服务器
- 发送信息
socketActivity.sendData(et_send.getText().toString()); //发送数据
- 断开连接
socketActivity.closeSocket(); //断开链接
网友评论