如果我们想在安卓端进行socket开发,那你就必须看我上一篇socket介绍
现在我们来开发:
第一步:添加权限
<android permission :android:name="android.permission.INTERNET"/>
第二部步:代码分析
开发思路:
socket通信毕竟是网络通信,所以一定 是耗时操作,因此我们要开线程,我们可以自己写一个类继承Tread这个类,添加这个构造方法,传入参数,因为我们是向服务器发送消息嘛,把参数传入进来,我们通过对这个参数进行编程就可以了
我们要用到 的主要的类是Socket,我们先在activity里面声明初始化,然后在MyThread里面new出来,传入InetSocketAddress()对象,里面填入的参数有通信 的ip地址和超时时间,然后通过socket进行流操作
OutputStream ou = socket.getOutputStream();
BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream()));
后面的都很简单,就不介绍了=.=
class MyThread extends Thread {
public String txt1;
public MyThread(String str) {
txt1 = str;
}
@Override
public void run() {
//定义消息
Message msg = new Message();
msg.what = 0x11;
Bundle bundle = new Bundle();
bundle.clear();
try {
//连接服务器 并设置连接超时为5秒
socket = new Socket();
socket.connect(new InetSocketAddress("1.1.9.30", 30000), 5000);
//获取输入输出流
OutputStream ou = socket.getOutputStream();
BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream())); //读取发来服务器信息
String line = null;
buffer="";
while ((line = bff.readLine()) != null) {
buffer = line + buffer;
}
//向服务器发送信息
ou.write("android 客户端".getBytes("gbk"));
ou.flush();
bundle.putString("msg", buffer.toString());
msg.setData(bundle); //发送消息 修改UI线程中的组件
myHandler.sendMessage(msg); //关闭各种输入输出流
bff.close();
ou.close();
socket.close();
} catch (SocketTimeoutException aa) { //连接超时 在UI界面显示消息
bundle.putString("msg", "服务器连接失败!请检查网络是否打开");
msg.setData(bundle); //发送消息 修改UI线程中的组件
myHandler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
网友评论