自定义发送短信验证码
来源:互联网 发布:读取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
- 自定义发送短信验证码
- 发送短信验证码
- 发送短信验证码
- 发送短信验证码
- 短信验证码发送
- 发送短信验证码
- 发送短信验证码
- Android发送短信验证码
- 发送短信验证码计时
- java发送短信验证码
- php发送短信验证码
- php发送短信验证码
- 发送短信验证码方法
- java 短信发送验证码
- 发送取短信验证码
- PHP发送短信验证码
- java发送短信验证码
- 发送短信验证--腾讯发送短信验证
- 空指针(NULL)那些事?
- GSM/GPRS/EDGE简介
- tjut 2854
- 1026: 组个最小数
- bjfu1003最长公共子序列
- 自定义发送短信验证码
- json和ajax整合处理国家城市的二级联动效果图
- JAVA源码剖析之---String类(一)
- git 的三种状态
- 64位win10系统无法安装.Net framework3.5的两种解决方法
- GSM Hacking Part ① :使用SDR扫描嗅探GSM网络 20160801
- 基本单位
- MSP430随机数产生器
- C++中逗号表达式的应用