"""
单船传输
"""
from socket import *
import time
sockfd = socket(AF_INET, SOCK_STREAM)
sockfd.bind(("0.0.0.0",8888))
sockfd.listen(2)
while True:
print("waiting~~~")
try:
conn_fd, conn_addr = sockfd.accept()
except KeyboardInterrupt:
print("Server exit")
break
else:
print("连接成功:", conn_addr)
while True:
#############################传输数据至决策模块#######################################
f = open("D:\项目\船桥防撞\SIMdata.txt")
line = f.readline() # 调用文件的 readline()方法,一行一行读取
while line:
resv_type_get = conn_fd.recv(1024).decode() # 1、获取传输数据请求
if resv_type_get == "get":
conn_fd.send(("%d"%(len(line))).encode()) #2、传输数据长度给决策模块
recv_continue=conn_fd.recv(1024).decode()
if recv_continue=="continue": #3、获取进一步传输数据指令
conn_fd.send(line.encode()) #4、传输AIS数据
############################从决策模块获取决策信息####################################
resv_type_send = conn_fd.recv(1024).decode() #5、接收传回信息指令
if resv_type_send=="send":
conn_fd.send("continue".encode()) #6、传回继续传输信息指令
num = int(conn_fd.recv(1024).decode()) # 7、接收将要传回的数据长度
conn_fd.send("continue".encode()) # 8、传回继续传输信息指令
resv_data=conn_fd.recv(num).decode() #9、获取决策模块传回的决策信息
len_resv_data=len(resv_data)
if num - len_resv_data > 0:
resv_data += sockfd.recv(num - len_resv_data).decode()
len_resv_data = len(resv_data)
print("返回的决策信息:",resv_data)
conn_fd.send("Get Message and Prase Right".encode()) #10返回给决策信息提示传回数据无误
time.sleep(0.5)
line = f.readline()
f.close()
sockfd.close()