Android手机的应用,除了它的手机功能之外,另外一个吸引人的地方在于它的开放性,这一点iphone无法比拟,至少iphone太多商业化气息。android为我们开启另一扇交流之窗,而要实现交流,socket通信必不可少。

java在socket通信方面上已经有了很好的范例,我只是抛砖引玉,将其引入到android之中,疏漏之处在所难免,很多地方也值得深思与考量,高手不必拍砖,可跳过此文。下面,用敲门的方式演示Android如何实现套接字的通信。

服务器程序

服务器程序需要在PC上运行,该程序比较的简单,因此不需要建立Android项目,直接定义一个JAVA类,并且运行该类即可。它仅仅建立ServerSocket监听,并使用Socket获取输入输出流。

import java.io.IOException;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class SimpleServer {    /**     * @param args     * @throws IOException      */    public static void main(String[] args) throws IOException {        // TODO Auto-generated method stub        //创建一个ServerSocket,用于监听客户端socket的连接请求        ServerSocket ss=new ServerSocket(30000);        //采用循环不断接受来自客户端的请求,服务器端也对应产生一个Socket        while(true){            Socket s=ss.accept();            OutputStream os=s.getOutputStream();            os.write("您好,您收到了服务器的新年祝福!n".getBytes("utf-8"));            os.close();            s.close();    }    }}

客户端程序

package my.learn.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.EditText;public class SimpleClient extends Activity {    private EditText show;    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        show = (EditText) findViewById(R.id.show);        try {            Socket socket = new Socket("自己计算机的IP地址", 30000);            //设置10秒之后即认为是超时            socket.setSoTimeout(10000);            BufferedReader br = new BufferedReader(new InputStreamReader(                    socket.getInputStream()));            String line = br.readLine();            show.setText("来自服务器的数据:"+line);            br.close();            socket.close();        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            Log.e("UnknownHost", "来自服务器的数据");            e.printStackTrace();        } catch (IOException e) {            Log.e("IOException", "来自服务器的数据");            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

需要注意的是,在Manifest.xml文件当中,需要对互联网的访问进行授权。




更多相关文章

  1. Android换行符变成方框的解决方法
  2. 谈Android手机客户端的适配测试
  3. Android(安卓)连接服务器 获取数据
  4. Android高手进阶教程(二十五)之---Android(安卓)中的AIDL!!!
  5. Android高手进阶教程(二十五)之---Android(安卓)中的AIDL!!!
  6. android :FTPServer
  7. Android(安卓)Debug Bridge(ADB) 技术实现
  8. Android(安卓)网络通信框架Volley (Google IO 2013)
  9. Android访问WCF服务(使用json实现参数传递)

随机推荐

  1. PHP数据类型及开发环境部署
  2. 初始 php 及认识 php 变量与数据类型
  3. PHP环境搭建与初识PHP
  4. oop编程 委托 和回调
  5. foreach 获取省市区
  6. 循环读取数组
  7. phpstorm 配置环境本地服务器教程
  8. PHP函数的使用
  9. 第十二课 数组循环
  10. 使用定位、flex与grid布局仿酒仙网手机端