Может кто-нибудь объяснить, почему моя программа-сокет выводит сообщение странным образом каждый раз, когда я запускаю код.
Я должен получить результаты сервера из списка, отправленного клиентом следующим образом:
Отправка запроса 'E1.0 -945 1689 -950 230 -25 1'
Полученный ответ:
Отправка запроса 'S0 2 -945 1689 -950 230 -25 1 1e-15'
Полученный ответ:
...
Вместо этого я получаю это:
Отправка запроса 'E1.0 -945 1689 -950 230 -25 1'
Полученный ответ:
Отправка запроса 'S0 2 -945 1689 -950 230 -25 1 1e-15'
Полученный ответ:
Отправка запроса 'G4.1 0 0' Полученный ответ: XНеправильный тип команды
Отправка запроса '4 1 0'
Полученный ответ: неправильный тип команды X
Отправка запроса 'E1.0'
Полученный ответ:
Отправка запроса 'S1.0'. Полученный ответ:
Отправка запроса 'S0 2 -945 1689 -950 230 -25 1 -1e-15' Полученный ответ:
Отправка запроса «Не число». Полученный ответ: XНеверный тип команды
Это происходит постоянно, иногда это работает так, как если бы большая часть полученных данных была неуместна. Это мой код ...
server.py
import socket
port = 12345
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mySocket.bind(('localhost', port))
mySocket.listen(0)
clientsocket, addr = mySocket.accept()
print("Connection from: {}\n".format(str(addr)))
while True:
encoded_message = clientsocket.recv(2048)
data = encoded_message.decode()
print(data)
if not data:
break
else:
acknowledge = "Sending request \'{}\'".format(data)
clientsocket.sendall(acknowledge.encode())
request_code = data[0]
if request_code == 'E':
messageO = "Received response: \n\r"
clientsocket.sendall(messageO.encode())
elif request_code == 'S':
messageO = "Received response: \n\r"
clientsocket.sendall(messageO.encode())
else:
messageO = "Received response: XIncorrect command type\n\r"
clientsocket.sendall(messageO.encode())
clientsocket.close()
* * Client.py тысяча сорок-девять
import socket
host = 'localhost'
port = 12345
mySocket = socket.socket()
mySocket.connect((host, port))
testing_strings = ["E1.0 -945 1689 -950 230 -25 1",
"S0 2 -945 1689 -950 230 -25 1 1e-15",
"G4.1 0 0",
"4 1 0",
"E1.0",
"S1.0",
"S0 2 -945 1689 -950 230 -25 1 -1e-15",
"Not a number",
"S0 2 -945 1689 -950 230 -25 1 0",
"S0 2 -945 1689 -950 230 G 1 1e-15"]
count = 0
print(len(testing_strings))
count = 0
for l in testing_strings:
if count == (len(testing_strings)-1):
mySocket.send(l.encode())
data = mySocket.recv(2048).decode('utf-8')
print(data)
mySocket.shutdown(1)
else:
mySocket.send(l.encode())
data = mySocket.recv(2048).decode('utf-8')
print(data)
count += 1
mySocket.close()