本节书摘来自异步社区《Android智能穿戴设备开发指南》一书中的第6章,第6.4节使用Socket发送求救信号,作者 王长青,更多章节内容可以访问云栖社区“异步社区”公众号查看
6.4 使用Socket发送求救信号Android智能穿戴设备开发指南通过本章前面内容的学习,已经了解了Java应用中Socket网络编程的基本知识。在Android平台中,可以使用相同的方法用Socket实现数据传输功能。本节将通过一个具体实例的实现过程,来讲解在Android穿戴设备中使用Socket发送求救信号的基本方法。
实例6-1 使用Socket发送求救信号,源码路径:daima6socket。
本实例的具体实现流程如下。
① 首先实现服务器端,使用Eclipse新建一个名为android_server的Java工程,然后编写服务器端的实现文件AndroidServer.java,功能是创建Socket对象client以接收客户端的请求,并创建BufferedReader对象in向服务器发送消息。文件AndroidServer.java的具体实现代码如下。
public class AndroidServer implements Runnable{ public void run() { try { ServerSocket serverSocket=new ServerSocket(54321); while(true) { System.out.println("等待接收用户连接:"); //接收客户端的请求 Socket client=serverSocket.accept(); try { //接收客户端的信息 BufferedReader in=new BufferedReader(new InputStreamReader(client. getInputStream())); String str=in.readLine(); System.out.println("read: "+str); //向服务器发送消息 PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStream Writer(client.getOutputStream())),true); out.println("return "+str); in.close(); out.close(); }catch(Exception ex) { System.out.println(ex.getMessage()); ex.printStackTrace(); } finally { client.close(); System.out.println("close"); } } } catch (IOException e) { System.out.println(e.getMessage()); } } public static void main(String [] args) { Thread desktopServerThread=new Thread(new AndroidServer()); desktopServerThread.start(); } }② 开始实现客户端的测试程序,使用Eclipse新建一个名为testSocket的Android工程,编写布局文件main.xml,在主界面插入一个信息输入文本框和一个“发送”按钮。文件main.xml的具体实现代码如下。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <EditText android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/but1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送" /> <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>③ 编写测试文件TestSocket.java,其功能是获取输入框的文本信息,并将信息发送到“192.168.2.113”。文件TestSocket.java的具体实现代码如下。
//客户端的实现 public class TestSocket extends Activity { private TextView text1; private Button but1; private EditText edit1; private final String DEBUG_TAG="mySocketAct"; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text1=(TextView)findViewById(R.id.text1); but1=(Button)findViewById(R.id.but1); edit1=(EditText)findViewById(R.id.edit); but1.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { Socket socket=null; String mesg=edit1.getText().toString()+"\r\n"; edit1.setText(""); Log.e("dddd", "sent id"); try { socket=new Socket("192.168.2.113",54321); //向服务器发送信息 PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStream Writer(socket.getOutputStream())),true); out.println(mesg); //接收服务器的信息 BufferedReader br=new BufferedReader(new InputStreamReader(socket. getInputStream())); String mstr=br.readLine(); if(mstr!=null) { text1.setText(mstr); }else { text1.setText("数据错误"); } out.close(); br.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }catch(Exception e) { Log.e(DEBUG_TAG,e.toString()); } } }); } }④ 在文件AndroidManifest.xml中添加访问网络的权限,具体代码如下。
到此为止,整个实例介绍完毕,执行的效果如图6-2所示。
相关资源:Android智能穿戴设备开发指南