У меня есть программа на python, которая подключается через TCP-IP к программе matlab, где код python - это клиент, а его номера приема, например:
1
2
5
6
7
etc..
(числа, которые я получаю: 1, 2, 3, 4, 5, 6, 7) в случайном порядке. Я получаю ошибку: ValueError: неверный литерал для int () с основанием 10: b'1 \ n5 \ n '. Мой код:
# TCP connection
try:
so = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error as err:
print ("socket creation failed with error %s" %(err))
#default port for socket
port = 2000
# default time out
#so.settimeout(1000000)
try:
host_ip = socket.gethostbyname('localhost')
except socket.gaierror:
# this means could not resolve the host
print ("there was an error resolving the host")
sys.exit()
# connecting to the server
so.connect((host_ip,port))
# MATLAB INFORMATION FOR OFFLINE EXPERIMENT
Nepoch = 10 #nr de epochs por trial
Nwords = 7 #nr de palavras (SIM, NAO, FOME, SEDE, URINAR, AR, POSICAO)
SeqTrain = [1, 3, 5, 7, 2, 4, 6, 1, 3, 5, 7, 2, 4, 6] #sequencia offline de treino
# read the TCP sequence received
def sequencia():
num = 0
for i in range(0,999):
s = so.recv(port) #+ b'\n' #since the sequence received is : 1\n 2\n 5\n etc
i = int(s)
#print(i)
#feedbak offline (for the user to know which are the words)
if (num in (0, Nepoch*Nwords+1, Nepoch*Nwords*2+2, Nepoch*Nwords*3+3, Nepoch*Nwords*4+4, Nepoch*Nwords*5+5,\
Nepoch*Nwords*6+6)):
labels1[i-1].configure(foreground="white")
root.update()
elif (num in (Nepoch*Nwords*7+7, Nepoch*Nwords*8+8, Nepoch*Nwords*9+9, Nepoch*Nwords*10+10,\
Nepoch*Nwords*11+11, Nepoch*Nwords*12+12, Nepoch*Nwords*13+13)):
labels2[i-1].configure(foreground="white")
root.update()
else:
labels[i-1].configure(background="green",foreground="red")
root.update()
winsound.PlaySound(sounds[i-1], winsound.SND_FILENAME)
labels[i-1].configure(background="gray",foreground="white")
root.update()
num = num + 1
Числа, которые я получаю, генерируются в режиме реального времени в программе Matlab. Дело в том, что когда я симулирую со стандартными значениями в Matlab, программа на Python работает просто отлично, что наводит меня на мысль, что это что-то из-за значений, генерируемых в Matlab в реальном времени.
Также, когда я комментирую часть #feedbak в автономном режиме (чтобы пользователь знал, какие слова) до конца, программа получает числа и без проблем делает i = int (s), только когда я раскомментирую остальное это дает мне ошибки.
Когда я печатаю значения, которые я получаю, это: b'1 \ n 'b'7 \ n' b'4 \ n 'b'2 \ n' b'6 \ n 'b'3 \ n' b '1 \ n' b'5 \ n '(и т. Д.) -> он никогда не говорит, что получает 2 значения одновременно, как это происходит, когда я раскомментирую остальную часть программы
Вся программа Python, которую я опубликовал, работает для первых 2/3 чисел, а затем выдает ошибку, вот трассировка:
>>>
RESTART: C:\Users\meca\Desktop\Python_Exercises\seq_tcp_offline-TCP-CLIENT.py
b'1\n'
b'7\n'
b'4\n'
Traceback (most recent call last):
File "C:\Users\meca\Desktop\Python_Exercises\seq_tcp_offline-TCP-CLIENT.py", line 139, in <module>
sequencia()
File "C:\Users\meca\Desktop\Python_Exercises\seq_tcp_offline-TCP-CLIENT.py", line 44, in sequencia
i = int(s)
ValueError: invalid literal for int() with base 10: b'2\n6\n'
Это очень странно для меня, у кого-нибудь из вас есть идеи? Большое спасибо