主要分为三部分:1.和server端建立连接。2.接收server端传递的数据。3.发送数据给server端。
1.和server端建立连接:
其实很简单,只要用把server端的ip和port传给socke就可以了,注意点是耗时操作要开个子线程来进行
/**
* 连接线程
*/
class ConnectServer extends Thread {
@Override
public void run() {
super.run();
try {
if (socket == null) {
//InetAddress来获取IP地址
InetAddress ip = InetAddress.getByName(edt_ip.getText().toString());
//获取port
Integer port = Integer.valueOf(edt_port.getText().toString());
socket = new Socket(ip, port); //创建连接地址和端口
ReceiveThread receiveThread = new ReceiveThread();
receiveThread.start();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.接收server端数据:
同样也是在子线程中实现,我这里都是写了一个内部类来继承Thread
/**
* 接收线程
*/
class ReceiveThread extends Thread {
@Override
public void run() {
super.run();
while (true) {
try {
final byte[] buffer = new byte[1024]; //创建接收缓冲区
inputStream = socket.getInputStream(); //通过socket读取数据
final int read = inputStream.read(buffer);//读取数据放到樊城区,并且返回数据长度
runOnUiThread(new Runnable() {
@Override
public void run() {
//将接收到的数据显示到textview,用runOnUiThread来写。
String s = new String(buffer, 0, read);
tv_receive.setText(s);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3.发送数据给server端:
同样,接收和发送都是用字节流(我是按钮点击发送),socket里已经把这些方法封装好了,字节流不熟悉可以百度java io流进行学习。
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
//获取输出流
outputStream = socket.getOutputStream();
//发送数据给server
outputStream.write(edt_send.getText().toString().getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
});
是不是很简单,写完以后打开网络调试助手测试一下
输入server端的ip和port,然后点击连接。
可以看见,连接成功
从server端发送一条数据试试
接收成功
这下试试从客户端发送给server端
也是ok的。
这就是一个简单的android tcp客户端。