一直都想做一些自己的app奈何多数功能都需要借助于服务器才能实现,本想用第三方平台,细想之下毕竟不是长久之计。这里自己搭建一个Android简易服务器

         这篇文章只是简单介绍下如何使用Java搭建Android服务器,刚学习不久,有不足之处欢迎指出,共同进步!

        一、环境搭建

                  1、  所需软件列表

                                   a、 Tomcat

                                   b、Eclipse

                                   c、JDK

                  2、环境配置

                             Tomcat配置、JDK安装 参考 http://jingyan.baidu.com/article/870c6fc33e62bcb03fe4be90.html,注意如果Eclipse中没有安装Tomcat插件(Windows--                                                  >Preferences中没有Server、Tomcat这项),可参考 http://www.cnblogs.com/xd502djj/archive/2013/01/17/2864659.html安装 Tomcat插件

      二、项目配置

                 1、服务端

                        1.1     Eclipse中 File-->new--->Dynamic Web Project 新建一个Web Project

                         1.2     在Java Resources 下新建一个包和Main类,写入如下代码: 

                       

package com.chatfree.server;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class Main {    public static final int PORT = 8888;//监听的端口号       public static void main(String[] args) {        System.out.println("服务器启动...\n");        Main server = new Main();        server.init();    }    public void init() {        try {            ServerSocket serverSocket = new ServerSocket(PORT);            while (true) {                // 一旦有堵塞, 则表示服务器与客户端获得了连接                  Socket client = serverSocket.accept();                // 处理这次连接                  new HandlerThread(client);            }        } catch (Exception e) {            System.out.println("服务器异常: " + e.getMessage());        }    }    private class HandlerThread implements Runnable {        private Socket socket;        public HandlerThread(Socket client) {            socket = client;            new Thread(this).start();        }        public void run() {            try {                // 读取客户端数据                  DataInputStream input = new DataInputStream(socket.getInputStream());                String clientInputStr = input.readUTF();//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException                // 处理客户端数据                  System.out.println("客户端发过来的内容:" + clientInputStr);                // 向客户端回复信息                  DataOutputStream out = new DataOutputStream(socket.getOutputStream());                System.out.print("请输入:\t");                // 发送键盘输入的一行                  String s = new BufferedReader(new InputStreamReader(System.in)).readLine();                out.writeUTF(s);                out.close();                input.close();            } catch (Exception e) {                System.out.println("服务器 run 异常: " + e.getMessage());            } finally {                if (socket != null) {                    try {                        socket.close();                    } catch (Exception e) {                        socket = null;                        System.out.println("服务端 finally 异常:" + e.getMessage());                    }                }            }        }    }}  

                  1.3 在第一步环境配置中配置好Tomcat后,点击Eclipse中的Tomcat图标,运行Tomcat

                   1.4  在Main类上右键  Run as-->Java Application 服务即可运行

                2、服务端      

                      新建一个Android项目,在MainActivity中写入以下代码,注意修改你的IP的地址:

package com.example.zgp.chatfree;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException;public class MainActivity extends ActionBarActivity {    private TextView myTextView;    private Button mBtnConnect;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        myTextView = (TextView) findViewById(R.id.tv_info);        mBtnConnect=(Button)findViewById(R.id.btn_connect);        mBtnConnect.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                new Thread(new Runnable() {                    @Override                    public void run() {                            Socket socket = null;                            try {                                //创建一个流套接字并将其连接到指定主机上的指定端口号                                socket = new Socket("192.168.1.91", 8888);                                //读取服务器端数据                                DataInputStream input = new DataInputStream(socket.getInputStream());                                //向服务器端发送数据                                DataOutputStream out = new DataOutputStream(socket.getOutputStream());                                String str = "I am Client";                                out.writeUTF(str);                                final String ret = input.readUTF();                                runOnUiThread(new Runnable() {                                    @Override                                    public void run() {                                        myTextView.setText(ret);                                        Toast.makeText(MainActivity.this,ret,Toast.LENGTH_SHORT).show();                                    }                                });                                System.out.println("服务器端返回过来的是: " + ret);                                out.close();                                input.close();                            } catch (Exception e) {                                System.out.println("客户端异常:" + e.getMessage());                            } finally {                                if (socket != null) {                                    try {                                        socket.close();                                    } catch (IOException e) {                                        socket = null;                                        System.out.println("客户端 finally 异常:" + e.getMessage());                                    }                                }                            }                        }                }).start();            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}
       布局文件如下:

     

xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">            android:id="@+id/tv_info"        android:text="@string/hello_world"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />          android:layout_below="@+id/tv_info"       android:text="Connect"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:id="@+id/btn_connect"/>

             运行Android项目,点击上面的Button,Eclipse 服务端控制台即可看到输出,同是在控制台输入字符,即可看到app中文本框中的内容改变。

                            


更多相关文章

  1. Android客户端打包方案分享
  2. Android搭建HTTP和WebSocket的服务器端
  3. Android仿人人客户端(v5.7.1)——欢迎和导引界面的编码实现
  4. 爱奇艺Android移动客户端app瘦身经验
  5. 接入新浪、腾讯微博和人人网的Android客户端实例 接入新浪、腾讯
  6. 【安卓开发】Facebook工程师是如何改进他们Android客户端的
  7. Android作为客户端,采用Netty与服务器通信
  8. JS判断客户端是否是iOS或者Android手机移动端

随机推荐

  1. android 开发中中,经常用到的代码
  2. Android AndBox 安安卜1.3发布
  3. Android的安全性和权限(Security and Perm
  4. android 获取Gps信息的程序源码
  5. Android 使用 TableLayout 布局拉伸宽度
  6. Apple 再挑起戰火,控告 Samsung 15款 Andr
  7. Android撸一个转盘抽奖
  8. android 中隐藏EditText的下划线方法
  9. android:configChanges属性
  10. Android 线程超时的例子