Android实现TCP客户端支持读写操作
本篇我们便来学习如何通过socket读写TCP.
创新互联公司是一家集成都网站设计、网站制作、网站页面设计、网站优化SEO优化为一体的专业网络公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。
需要注意的是socket必须写在子线程中,不能在ui主线程中直接使用,所以我们这里创建了两个class:
MainActivity(主界面)、TcpThread(获取socket接收的数据)
由于代码有注释了,所以就不解释了.
1.gif效果如下

2.activity_main.xml如下所示:
3.MainActivity.java如下所示
package com.example.tcpdemo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
TcpThread mt;
TextView tv_recv;
EditText et_text; //要发送的内容
Button btn_send;
//定义一个handler
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
//打印服务器端发来的消息
System.out.println("read:"+msg.obj.toString());
tv_recv.append(msg.obj.toString()+"\r\n");
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_recv = (TextView)findViewById(R.id.tv_recv);
et_text = (EditText)findViewById(R.id.et_text);
mt = new TcpThread();
mt.setHandler(mHandler); //设置handler
mt.setIp("10.10.10.104"); //设置服务器地址
mt.start(); //启动线程
btn_send = (Button)findViewById(R.id.btn_send);
btn_send.setOnClickListener(new OnClickListener() {
//向服务器端发送数据
public void onClick(View v) {
if(!mt.write(et_text.getText().toString()))
{
Toast.makeText(getApplicationContext(), "发送失败", Toast.LENGTH_SHORT).show();
}
}
});
}
}4.TcpThread.java如下所示
package com.example.tcpdemo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.os.Handler;
import android.os.Message;
public class TcpThread extends Thread {
Handler mHandler=null;
Socket socket = null;
String ip = null;
OutputStream outputStream = null; //输出流
InputStream inputStream=null; //接收流
//获取另一个线程的Handler
public void setHandler( Handler handler){
mHandler = handler;
}
//设置服务器IP
public void setIp(String ip){
this.ip = ip;
}
public void run(){
try {
socket = new Socket(ip, 8080); //访问指定的ip地址:8080
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//获取输出流
try {
outputStream = socket.getOutputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try{
while (true) //读取服务器端发送来的数据
{
final byte[] buffer = new byte[1024];//创建接收缓冲区
inputStream = socket.getInputStream();
final int len = inputStream.read(buffer);//数据读出来,并且返回数据的长度
if(len>0)
{
Message msg = mHandler.obtainMessage();
//设置发送的内容
msg.obj = new String(buffer,0,len);
mHandler.sendMessage(msg);
}
}
}
catch (IOException e) {
}
}
//向服务器端写入数据
public boolean write(String text){
boolean ret = true;
try {
outputStream.write(text.toString().getBytes());
} catch (IOException e) {
ret = false;
e.printStackTrace();
}
return ret;
}
}总结
以上所述是小编给大家介绍的Android实现TCP客户端支持读写操作,希望对大家有所帮助!
当前标题:Android实现TCP客户端支持读写操作
网页链接:http://jxjierui.cn/article/jiopdg.html


咨询
建站咨询
