2
iがポートをTCPと受信データとmysqlデータベース内のデータのセーブ小さな文字列処理の後に耳を傾けるPythonスクリプトを持って作業を開始しますしばらくして、最初に私はmysql接続エラーを取得し、サーバーがハングアップし、クラッシュ後にダウン!サーバのクラッシュは
私のコードはこれです:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import os
import threading
import mysql.connector
import sys
import signal
from datetime import datetime, date,time
import time as timehelper
#//******defines******\\#
HOST = '127.0.0.1'
PORT = 8889
Dconn = mysql.connector.connect(user='root', password='peiman64',host='127.0.0.1',database='prisoner',charset='utf8')
print('databased stablished.')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(50)
print ('Socket listening started')
def processString(stri,addr):
arr = stri.split('#')
arr = arr[2].split(',')
print(arr)
if len(arr)<7 :
sys.exit()
imei=arr[0]
password=arr[1]
indate=arr[2]
intime=arr[3]
gislat=arr[4]
gislong=arr[5]
speed=arr[6]
btrylvl=arr[13]
cursor = Dconn.cursor(buffered=True)
devCountresult = "select COUNT(*) as num,dvid from devices where code="+imei
cursor.execute(devCountresult)
resC,dId = cursor.fetchone()
if resC ==0 :
cursor.execute("INSERT INTO devices (code) VALUES ("+imei+")")
devId = cursor.lastrowid
else:
devId = dId
d = date(int(indate[4:8]), int(indate[2:4]), int(indate[0:2]))
t = time(int(intime[0:2]), int(intime[2:4]), int(intime[4:6]))
fTime = datetime.combine(d, t)
fTime =int(datetime.timestamp(fTime))
cursor.execute("INSERT INTO raw (device, longt, lat,battery, recv_time,dev_time) VALUES ('"+format(devId)+"','"+gislong+"','"+gislat+"','"+format(btrylvl)+"','"+format(timehelper.time())+"','"+format(fTime)+"')")
insertedId = cursor.lastrowid
serverResult = "select * FROM servers where status='active';"
cursor.execute(serverResult)
serer = cursor.fetchall()
for ser in serer :
cursor.execute("INSERT INTO `row_sent` (`signal_id`, `server_id`) VALUES ('"+format(insertedId)+"', '"+format(ser[0])+"');")
print('aaa')
Dconn.commit()
print(insertedId)
if insertedId>0:
return 1
else:
return 0
#//******socket treadingg******\\#
def clientthread(conn,addr):
while True:
data = conn.recv(1024)
adata = data.strip().decode('utf-8')
if len(adata) > 0:
processString(adata,addr)
reply ="#AL#1###\r\n"
conn.send(bytes(reply, 'UTF-8'))
#//******----------------******\\#
while True:
conn, addr = s.accept()
print ('Connected with ' + addr[0] + ':' + str(addr[1]))
t = threading.Thread(target=clientthread, args=((conn),(addr),))
t.start()
s.close()
サーバがきれいで、他のソフトウェアを持っていけません!
ここで自分のコードに問題がありますか?
サーバクラッシュのこの種は、パスの最大オープンファイルの制限のために起こった