完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
【创龙AM4379 Cortex-A9试用体验】之开发基于Python的Sqlite3与socket套接字C/S架构程序 在“【创龙AM4379Cortex-A9试用体验】之移植Python2.7与sqlite3到TL-4379”这篇试用报告中,我们移植了Sqlite3与Python2.7.3到创龙TL-4379开发板,移植的Python2.7.3支持import sqlite3和import socket,即当前的Python可以直接导入sqlite模块和socket模块,实现对本地sqlite3数据库操作,并且我们可以利用python优秀的网络开发特性,快速开发一个基于C/S架构的网络通讯程序。如果系统能够操作数据库,并能够根据客户端请求,TL-4379能够将本地的数据发送给客户端,这就达到了数据终端服务器的基本要求了。 我们这一篇试用报告在上一篇移植Python到TL-4379的基础上,开发两个小程序,进一步验证在TL4379开发板上运行Python程序可行性。 其中第一个程序测试基于Python的sqlite3数据库操作程序,分别操作存储在本地存储器上的数据库文件,和操作定义在内存中的数据库。 第二个测试程序为基于Python的采用socket套接字的C/S(Client/Server)工作模式的网络通讯程序,分别设计客户端程序和服务器端程序。 1. 基于Python的sqlite3测试程序 在Windows系统下通过记事本创建文件:testsqlite3.py 在该文件中创建4个函数: sqlite_basic() //基本的建表、插入数据、查询数据 def sqlite_adv() //建表、输入数据、参数化查询数据 sqlite_adv2() //创建内存数据库、插入数据、查询数据 sqlite_adv3() //创建内存数据库、引入datetime、参数化更新、查询数据 程序源码如下: import sqlite3 def sqlite_basic(): #Connect to db conn = sqlite3.connect('test.db') #create cursor c= conn.cursor() #Create table c.execute(''' create table if not exists stocks (date text, trans text, symboltext, qty real, price real) ''' ) #Insert a row of data c.execute(''' insert into stocks values('2006-01-05','BUY','REHT',100,35.14) ''' ) #query the table rows = c.execute("select *from stocks") #print the table for row in rows: print(row) #delete the row c.execute("delete from stocks where symbol=='REHT'") #Save (commit) the changes conn.commit() #Close the connection conn.close() def sqlite_adv(): conn = sqlite3.connect('test2.db') c= conn.cursor() c.execute(''' create table if not existsemployee (id text, name text, age inteage) ''') #insert many rows for t in [('1', 'itech', 10), ('2', 'jason', 10), ('3', 'jack', 30), ]: c.execute('insert into employee values (?,?,?)', t) #create index create_index = 'CREATE INDEX IF NOT EXISTS idx_id ON employee (id);' c.execute(create_index) #more secure t= ('jason',) c.execute('select * from employee where name=?', t) #fetch query result for row in c.fetchall(): print(row) conn.commit() conn.close() def sqlite_adv2(): #memory db con = sqlite3.connect(":memory:") cur = con.cursor() #execute sql cur.executescript(''' create table book( title, author, published ); insert into book(title, author, published) values ( 'AAA book', 'Douglas Adams', 'china electronic' ); ''') rows = cur.execute("select * from book") for row in rows: print("title:" + row[0]) print("author:" + row[1]) print("published:" + str(row[2])) def sqlite_adv3(): import datetime #Converting SQLite values to custom Python types #Default adapters and converters for datetime and timestamp con = sqlite3.connect(":memory:",detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES) cur = con.cursor() cur.execute("create table test(d date, ts timestamp)") today = datetime.date.today() now = datetime.datetime.now() cur.execute("insert into test(d, ts) values (?, ?)", (today,now)) cur.execute("select d, ts from test") row = cur.fetchone() print today, "=>", row[0], type(row[0]) print now, "=>", row[1], type(row[1]) cur.execute('select current_date as "d [date]",current_timestamp as "ts [timestamp]" from test') row = cur.fetchone() print "current_date", row[0], type(row[0]) print "current_timestamp", row[1], type(row[1]) sqlite_basic() sqlite_adv() sqlite_adv2() sqlite_adv3() 将上述testsqlite3.py拷贝到Ubuntu虚拟机的NFS共享目录下,启动TL-4379开发板,执行如下命令: mount -t nfs 192.168.1.107:/nsfshare /mnt-o nolock cd /mnt ./Python/_install/bin/python testsqlite3.py 结果如下图所示: 从命令行打印出的信息来看,与我们程序里固定编写的内容是一致的。 2. 基于Python的socket 服务器/客户端网络通信程序 我们采用C/S架构的开发模式,服务器端程序运行在TL-4379一侧,客户端程序运行在我的Ubuntu PC机一侧。 服务器实时监听客户端连接请求,当有客户端连接到服务器后,服务器端程序进入循环体中,等待客户端的命令请求,并更具客户端请求的命令,返回shell执行的结果给客户端。 客户端启动后,首先连接服务器,两者建立连接后,客户端等待用户输入命令,如“ls /dev/input”,用户输入命令后,客户端将命令数据发送的服务器端,服务器软件将命令结果返回给客户端,客户端回显数据。 2. 1服务器端程序 创建Python文件py_socket_server.py,代码如下: import socket import commands HOST='192.168.1.107' PORT=50007 s= socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((HOST,PORT)) s.listen(1) while 1: conn,addr=s.accept() print'Connected by',addr while 1: data=conn.recv(1024) cmd_status,cmd_result=commands.getstatusoutput(data) if len(cmd_result.strip()) ==0: conn.sendall('Done.') else: conn.sendall(cmd_result) conn.close() 2. 2客户端程序 创建Python文件py_socket_client.py,代码如下: import socket HOST='192.168.1.107' PORT=50007 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((HOST,PORT)) while 1: cmd=raw_input("Please input cmd:") s.sendall(cmd) data=s.recv(1024) print data s.close() 2. 3 测试 将两个文件拷贝到Ubuntu虚拟机的NFS共享目录,在TL-4379开发板中的挂载NFS, mount -t nfs 192.168.1.107:/nfsshare /mnt-o nolock cd /mnt ./Python/_install/bin/python py_socket_server.py 命令执行效果如下图所示: 此时服务器处于监听状态,等待客户端的连接请求。 在Ubuntu虚拟机上执行如下命令: cd /nfsshare python py_socket_client.py 命令执行结果如图所示: 从命令行反馈信息看,说明客户端已经与服务器建立了连接,客户端当前正在等待用户输入命令。 我们在再来看看服务器、客户端建立连接后,服务器端,即TL-4379开发板上的命令行信息如图所示: |
|
相关推荐
3 个讨论
|
|
看看,学习学习。
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
852 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2844 浏览 1 评论
867 浏览 0 评论
1710 浏览 1 评论
2758 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 03:09 , Processed in 0.546841 second(s), Total 43, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号