1.服务端
import socket
import time
print("1111111111111111")
import tensorflow as tf
from test1 import ef
# 这里写需要加载的包
print("2222222222222222")
End = 'end send' # 这里是为了判断对应的客户端请求命令的结束标志,目的是为了接受超过1024个字符的(client)客户端请求。
def recv_end(the_socket):
total_data = []
while True:
data = the_socket.recv(2048).decode('utf-8')
if End in data:
total_data.append(data[:data.find(End)])
break
total_data.append(data)
if len(total_data) > 1:
# check if end_of_data was split
last_pair = total_data[-2] + total_data[-1]
if End in last_pair:
total_data[-2] = last_pair[:last_pair.find(End)]
total_data.pop()
break
return ''.join(total_data)
HOST = ''
PORT = 57
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)
data = recv_end(conn)
method = data[0]
subdata = data[1:]
if (method == "1"): # 当客户端传递过来的第一个字符为1时,params表示传递过来的参数
params = subdata.split("|")
t1 = time.time()
# 这里写要调用的函数
ef(tf)
t2 = time.time()
print("1111111111111111111")
# AI_run(FaceRecognizer)
print("总时间:{}ms".format((t2-t1)*1000))
# 将结果返回给客户端
conn.sendall((str((params[0], params[1]))).encode())
elif (method == "2"):
params = subdata.split("|")
# 这里写要调用的函数
# AI_run(FaceRecognizer)
print("2222222222222222222222222222")
# 将结果返回给客户端
conn.sendall((str((params[0], params[1]))).encode())
elif (method == "3"):
params = subdata.split("|")
# 这里写要调用的函数
print("33333333333333333333333333333333")
# AI_run(FaceRecognizer)
# 将结果返回给客户端
conn.sendall((str((params[0], params[1]))).encode())
conn.close()
2.客户端
import socket
HOST = '127.0.0.1' # The remote host
PORT = 57 # The same port as used by the server
End = 'end send'
def cl_test(test1, test2):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall((str(1) + test1 + "|" + test2 + End).encode()) # str(1)表示第一个字符,然后在server端中规定字符串用|隔开
data = []
while True:
subdata = s.recv(2048) # 接受服务端返回参数
if not subdata:
break
data.append(str(subdata, encoding='utf-8'))
data = ''.join(data)
print(data)
s.close()
return data # data是服务端的返回参数
cl_test("d", "d")
3.你自己需要运行的程序,这里我是 test1.py文件。
def ef(tf):
a = tf.constant(5.0)#tf.constant是tensorflow库中的函数
b = tf.constant(6.0)
print(a,b)
4.这里的通信你可以放在任何你需要执行的python代码中,相当于提前准备好库,已经导入了各种你所需要的python库后,你只需要一个客户端传来的信号就可以立刻执行,同时服务端不会断开,随时接受你传来的信号执行你所需要的程序,这就减少了你每次执行该程序时需要导入包的大量时间,一个项目的完成少不了大量的包导入,这样你的程序性能会更加高,更加具有实时行,尤其是对于在Java 中调用python进行视频智能识别的项目。
5.及时收藏,避免迷路。