Почему мой вывод меняется при отправке списков через TCP-сокет в Python 3.6? - PullRequest
0 голосов
/ 25 апреля 2018

Может кто-нибудь объяснить, почему моя программа-сокет выводит сообщение странным образом каждый раз, когда я запускаю код.

Я должен получить результаты сервера из списка, отправленного клиентом следующим образом:

Отправка запроса '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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...