VB开发安卓程序_例程2网络编程之账号验证(修缮版)

这个例程的源码已上传

运行截图


布局文件

载入布局文件

B4A网络编程,如果是涉及到PHP+MYSQL,那么需要一些PHP基础知识,最主要的是掌握面对对象操作数据库(PHP版本从6.0左右开始,已不建议用面向过程操作数据库,而是建议用面向对象操作数据库。)里面的数据库连接,SQL查询语句的简单用法,反正不需要掌握太深的PHP知识。

PHP文件内容如下

<?php

/*  接收B4A发过来的变量

    与B4A进行数据交换的PHP文件中,若PHP用$_GET去接收B4A通过job.Download()方式发过来的变量,
    会造成PHP文件无法识别变量,PHP得用$_REQUEST去接收B4A发过来的变量,
    否则JobDone事件中,job.Success = False ,错误信息如下
    org.apache.http.conn.HttpHostConnectException: Connection to http://279487ka23.wicp.vip refused

 */

// 获取用户提交的用户名和密码,$_REQUEST右侧的变量名字
//就是B4A发送给PHP的变量,具体查看B4A代码中的函数btnLogin_Click
$username = $_REQUEST['user_id'];
$password = $_REQUEST['password'];

// 模拟数据库中的用户名和密码
//你也可以通过SQL去查询MYSQL数据,并返回查到的记录,这里只是简单的演示
$valid_username = 'example_user';
$valid_password = 'example_password';

// 验证用户名和密码是否匹配
if ($username === $valid_username && $password === $valid_password) {

    // 这输出的内容,就是返回给B4A的内容。
    //B4A代码的事件JobDone里面用Job.GetString 接收这些返回的数据
    echo "OK";

} else {

    // 这输出的内容,就是返回给B4A的内容
    echo "fail";

}

?>

Main模块代码如下 

#Region  Project Attributes 
	#ApplicationLabel: HTTP Login
	#VersionCode: 1
	#VersionName: 
	'SupportedOrientations possible values: unspecified, landscape or portrait.
	#SupportedOrientations: portrait
	#CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes 
	#FullScreen: False
	#IncludeTitle: True
#End Region

Sub Process_Globals
	'These global variables will be declared once when the application starts.
	'These variables can be accessed from all modules.

End Sub

Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.

'	这些控件是放置在布局文件frmlogin.bal
'	所以不必初始化,也不必用active.addview方法添加到屏幕
	Private btnLogin As Button
	Private Label1 As Label
	Private Label2 As Label
	Private Label3 As Label
	Private Panel1 As Panel
	Private txtPassword As EditText
	Private txtUserID As EditText
	
End Sub

Sub Activity_Create(FirstTime As Boolean)
	
	'载入布局文件
	Activity.LoadLayout("frmlogin")
	
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

'点击登录按钮
Sub btnLogin_Click
	
	Dim strUsername As String = txtUserID.Text.Trim
	
	If strUsername = "" Then
		
		Msgbox("Please enter User ID", "Error")
		Return
		
	End If	
	
	
	Dim strPassword As String = txtPassword.Text.Trim 
	
	If strPassword = "" Then
		Msgbox("Please enter Password", "Error")
		Return
	End If	
	
	'HttpJob类可实现网络编程,比如向PHP文件发送查询语句等等
	Dim job1 As HttpJob
	job1.Initialize("Login", Me)	
	
	'B4A允许你使用符号 _ 让一个字符串分成多行
	job1.Download2("http://kbase.herobo.com/login.php", _
	Array As String("user_id",strUsername,"password",strPassword))
	
'	等待状态
	ProgressDialogShow("正在验证中...")
	
End Sub

'HttpJob对象事件,执行Download2方法时触发
Sub JobDone (Job As HttpJob)
	
'	隐藏等待
	ProgressDialogHide
	
'	日志页面输出内容
	Log("JobName = " & Job.JobName & ", Success = " & Job.Success)
	
'	Job.Success = True 代表访问PHP成功,并成功返回数据
	If Job.Success = True Then
		
		Dim strReturn As String 
		
		Log(Job.GetString)
		
'		Job.GetString 用于获取返回的数据
		strReturn = Job.GetString 
		
		Label3.Text = strReturn
	Else
		
'		无法访问PHP
		Log("Error: " & Job.ErrorMessage)
		ToastMessageShow("Error: " & Job.ErrorMessage, True)
		
	End If
	
	Job.Release
End Sub

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种非常常用的编程语言,其在网络编程方面也有很多应用。其中,socket编程是其中之一的重要技术。下面是一个简单的C语言socket网络编程例程。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #define PORT 8080 #define MAX_BUFFER_SIZE 1024 int main() { int server_fd, new_socket, valread; struct sockaddr_in address; int addrlen = sizeof(address); char buffer[MAX_BUFFER_SIZE] = {0}; char *response = "Hello from server"; // 创建socket if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("Failed to create socket"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // 绑定地址和端口 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("Failed to bind"); exit(EXIT_FAILURE); } // 监听端口 if (listen(server_fd, 3) < 0) { perror("Failed to listen"); exit(EXIT_FAILURE); } // 接受客户端请求 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("Failed to accept"); exit(EXIT_FAILURE); } // 读取客户端发来的消息 valread = read(new_socket, buffer, MAX_BUFFER_SIZE); printf("Received message: %s\n", buffer); // 返回消息给客户端 send(new_socket, response, strlen(response), 0); printf("Message sent\n"); // 关闭socket close(new_socket); close(server_fd); return 0; } 这个例程实现了一个简单的TCP服务器。它首先创建一个socket并绑定地址和端口。然后通过监听端口等待客户端连接,在接受到客户端的连接请求后,它会读取客户端发来的消息,并将一个固定的响应消息发回给客户端。最后关闭socket。 需要注意的是,这只是一个简单的例程,还有很多网络编程相关细节和错误处理没有包括在内。在实际应用中,可能还需要加入更多的逻辑和功能来满足具体需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值