本节书摘来自异步社区《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所示。
![c335f195deb11f1de3aad94093fed5e0ba974d3f](https://yqfile.alicdn.com/c335f195deb11f1de3aad94093fed5e0ba974d3f.png?x-oss-process=image/resize,w_1400/format,webp)