Я работаю над проектом клиент / сервер tcp, и мне интересно, какой хороший метод для "проверки", что сервер / клиент готов к отправке данных.Это потому, что у моего клиента есть графический интерфейс, и я хочу, чтобы сервер был готов к любому вводу в любое время, и поэтому должен убедиться, что он не пытается отправлять данные, в то время как он должен отправлять данные
Здесьмоя попытка
Клиент:
import socket
# Methods of a class
def receiveData(self, FROM=""):
if self.SENT_LAST:
print("DATA WAS LAST SENT BY CLIENT, NO CHECK REQUIRED")
else:
print("DATA LAST SENT BY CLIENT, CHECK REQUIRED")
self.sendPickledData("dataReady")
print("In receive data")
if FROM:
print("From:", FROM)
data = s.recv(4096)
try:
data = pickle.loads(data)
except pickle.UnpicklingError as err:
errorReport(err)
time.sleep(0.2)
self.SENT_LAST = False
if data != noData:
print("data :",data)
return data
else:
print("No data found")
return False
def sendPickledData(self, data, FROM=""):
if self.SENT_LAST:
print("DATA WAS LAST SENT BY CLIENT, CHECK REQUIRED")
checkData = self.receiveData("sendpickled")
print("CheckData :", checkData)
if checkData != "dataReady":
raise ValueError
else:
print("DATA LAST SENT BY CLIENT, NO CHECK REQUIRED")
print("In sendPickle, data :", data)
if FROM:
print("From:", FROM)
data = pickle.dumps(data)
s.sendall(data)
time.sleep(0.5)
self.SENT_LAST = True
print("Data sent")
Сервер:
import socket
def receiveData_v2(FROM, FUNC=[]):
global SENT_LAST, receive_count
receive_count += 1
print("Receive :",receive_count)
print("Receiving")
if SENT_LAST:
print("DATA WAS LAST SENT BY SERVER, NO CHECK REQUIRED")
if not SENT_LAST:
print("DATA LAST SENT BY SERVER, CHECK REQUIRED")
sendPickledData("dataReady")
SENT_LAST = False
print("In receive data")
if FROM:
print("From:", FROM)
data = conn.recv(4096)
try:
data = pickle.loads(data)
except pickle.UnpicklingError as err:
print("Pickling error:")
print(err)
if data == PROG_QUIT:
return data
elif data == noData:
return False
else:
if FUNC:
funcData = FUNC(data)
return funcData
else:
return data
def sendPickledData(data):
global SENT_LAST, send_count
send_count += 1
print("Send :",send_count)
print("sending")
if SENT_LAST:
print("DATA WAS LAST SENT BY SERVER, CHECK REQUIRED")
print("sent last")
checkData = receiveData_v2("sendpickled")
print("CheckData :", checkData)
if checkData != "dataReady":
raise ValueError
else:
print("DATA LAST SENT BY SERVER, NO CHECK REQUIRED")
print("In sendPickled,\nSending:", data)
data = pickle.dumps(data)
conn.sendall(data)
SENT_LAST = True
conn.sendall(data)
Всякий раз, когда я пытаюсь отправить данные с помощью этого метода, каким-то образом происходит отключение синхронизации, и ониоба будут пытаться прослушивать данные одновременно.Или receiveData (клиент) получит только «dataReady»