自定义发送短信验证码

来源:互联网 发布:读取acess数据分析统计 编辑:程序博客网 时间:2024/05/17 02:19

问题:做WEB开发,用户注册块发送短信验证码验证。


解决方案:该方案涉及java application与android application 。两者使用TCP连接。安卓端连接上前者,前者便可发送电话号码与短信验证码给安卓端,安卓端发送短信。



代码贴上- - 

</pre>服务端:<pre name="code" class="java">import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;public class SmsService implements Runnable {private ServerSocket ss;private Socket client;private OutputStream os;private BufferedReader br;private boolean ready;// 可以开始发送短信的标识private boolean run;public SmsService() {ready = false;try {ss = new ServerSocket(5821);// 开启服务端口} catch (IOException e) {e.printStackTrace();}}/** * 发送一条短信验证 *  * @param phone_number *            接收短信的号码 * @param verification_code *            验证码 * @return */public boolean sendSMS(String phone_number, String verification_code) {if (!ready)return false;try {os.write((phone_number + ":" + verification_code + "\r\n").getBytes());} catch (IOException e) {e.printStackTrace();return false;}return true;}@Overridepublic void run() {run = true;while (run) {try {client = ss.accept();// 进入阻塞,等待客户端接入// 新的客户端接入,丢弃之前的连接,这里就不做处理了br = new BufferedReader(new InputStreamReader(client.getInputStream()));os = client.getOutputStream();ready = true;System.out.println("Ready!!!");} catch (IOException e) {e.printStackTrace();}}}public void close() {run = false;try {if (os != null)os.close();if (br != null)br.close();if (client != null)client.close();if (ss != null)ss.close();} catch (IOException e) {}}/** * 测试 *  * @param args */public static void main(String[] args) {Scanner cin = new Scanner(System.in);SmsService sms = new SmsService();new Thread(sms).start();while (cin.hasNext()) {String phone = cin.nextLine();String content = cin.nextLine();while (!sms.ready);sms.sendSMS(phone, content);}}}


安卓端:

首先是必须的权限

    <!--访问网络-->    <uses-permission android:name="android.permission.INTERNET" />    <!--发送短信-->    <uses-permission android:name="android.permission.SEND_SMS" />

界面:
<?xml version="1.0" encoding="utf-8"?><LinearLayout 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:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="zmy.com.sms_service.MainActivity">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal">        <LinearLayout            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:orientation="vertical">            <EditText                android:id="@+id/et_url"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:hint="请输入服务器URL"/>            <EditText                android:id="@+id/et_port"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:hint="服务端口"/>        </LinearLayout>        <Button            android:id="@+id/bt_start"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_horizontal"            android:text="启动" />    </LinearLayout>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="LOG:" />    <TextView        android:id="@+id/tv_log"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>

界面交互等:
package zmy.com.sms_service;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.ActionBarActivity;import android.telephony.SmsManager;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.Window;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;import java.util.ArrayList;public class MainActivity extends ActionBarActivity implements View.OnClickListener {    private String URL;    private int PORT;    private Button button;    private EditText url;    private EditText port;    private TextView log;    private boolean thread_run;//线程运行标志    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            if (msg.what == 1) {                String str = (String) msg.obj;                log.append(str + "->");                String strs[] = str.split(":");                SmsManager manager = SmsManager.getDefault(); //获得默认的消息管理器                String content = "验证码:"+strs[1]+",十分钟内有效,请妥善保管。";                manager.sendTextMessage(strs[0], null, content, null, null); //发送短信                log.append("ok\r\n");            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);//看到标题就不爽- -        setContentView(R.layout.activity_main);        init_view();    }    private void init_view() {        log = (TextView) findViewById(R.id.tv_log);        url = (EditText) findViewById(R.id.et_url);        port = (EditText) findViewById(R.id.et_port);        button = (Button) findViewById(R.id.bt_start);        button.setOnClickListener(this);    }    @Override    public void onClick(View v) {        if (button.getText().equals("启动")) {            button.setText("停止");            String url_text = url.getText().toString().trim();            String port_text = port.getText().toString().trim();            if (!url_text.equals("") && !port_text.equals("")) {                URL = url_text;                PORT = Integer.parseInt(port_text);            } else {                URL = "qq434595824.6655.la";                PORT = 5821;            }            new Thread(new Runnable() {                @Override                public void run() {                    boolean conn_flag = true;                    Socket socket = null;                    BufferedReader br = null;                    while (conn_flag) {                        try {                            socket = new Socket(URL, PORT);                            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));                            conn_flag = false;                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                    thread_run = true;                    while (thread_run) {                        String str;                        try {                            str = br.readLine();                        } catch (IOException e) {                            e.printStackTrace();                            continue;                        }                        //通知主线程发送短信                        Message msg = new Message();                        msg.what = 1;                        msg.obj = str;                        handler.sendMessage(msg);                    }                }            }).start();        } else {            thread_run = false;            button.setText("启动");        }    }}
使用的是俩真机测试,图片就不贴了

0 0
原创粉丝点击