TypeError: 'str' object cannot be interpreted as an integer
Клиент (код):
import socket
True_aliases = [True, 'True', '+', 'true', 'yes', 'Yes', 1, '1']
def processing_echo(echo):
print(echo)
def mess(HOST, PORT):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
print('Соединение успешно установлено')
while True:
command = input('Введите команду (CM-client, подключено): ')
if command.find('send') == 0:
s.sendall(bytes(command[5:], encoding='utf8'))
elif command.find('acc') == 0:
s.sendall(bytes('acc', encoding='utf8'))
print('История эхо-ответов:', dict(s.recv(1024), encoding = 'utf8'))
def main():
while True:
print('Клиент CM запущен успешно')
command = input('Введите команду (CM-client): ')
if command.find('start connect') == 0:
HOST = input('Введите IPv4 сервера: ')
PORT = int(input('Введите порт сервера: '))
mess(HOST, PORT)
main()
Клиент (консоль):
Клиент CM запущен успешно
Введите команду (CM-client): start connect
Введите IPv4 сервера: 127.0.0.1
Введите порт сервера: 1042
Соединение успешно установлено
Введите команду (CM-client, подключено): send mess Очередное тестовое сообщение
Введите команду (CM-client, подключено): send mask edit MrSvinia
Введите команду (CM-client, подключено): send mask info
Введите команду (CM-client, подключено): acc
История эхо-ответов: {'encoding': 'utf8'}
Введите команду (CM-client, подключено):
Сервер (код):
import socket
from _thread import *
import datetime
host = '127.0.0.1'
port = 1042
ThreadCount = 0
def client_handler(connection):
client_mask = '(' + (str(connection)[str(connection).index('raddr=') + 7:])[:-1]
recv = {'client': client_mask}
while True:
data = str(connection.recv(1024), encoding = 'utf8')
if data == 'disconnect' or not data:
print('Клиент:', client_mask + ', отключён')
break
elif data.find('mess') == 0:
print(client_mask + ':', data[5:])
elif data.find('mask') == 0:
if data.find('edit') == 5:
client_mask = data[10:]
recv['client'] = client_mask
elif data.find('info') == 5:
recv['<' + str(datetime.datetime.now()) + '> ' + data] = 'Ваш псевдоним: ' + client_mask
else:
recv['<' + str(datetime.datetime.now()) + '> ' + data] = 'Команда не распознана'
elif data.find('acc') == 0:
print(recv)
connection.sendall(bytes(recv))
recv = {'client': client_mask}
else:
recv['<' + str(datetime.datetime.now()) + '> ' + data] = 'Команда не распознана'
connection.close()
def accept_connections(ServerSocket):
Client, address = ServerSocket.accept()
print('Принято подключение с: ' + address[0] + ':' + str(address[1]))
start_new_thread(client_handler, (Client, ))
def start_server(host, port):
ServerSocket = socket.socket()
try:
ServerSocket.bind((host, port))
except socket.error as e:
print(str(e))
print(f'Сервер открыт для поключений на порту {port}...')
ServerSocket.listen()
while True:
accept_connections(ServerSocket)
start_server(host, port)
Сервер (консоль):
Сервер открыт для поключений на порту 1042...
Принято подключение с: 127.0.0.1:49362
('127.0.0.1', 49362): Очередное тестовое сообщение
{'client': 'MrSvinia', '<2023-03-08 17:01:07.675276> mask info': 'Ваш псевдоним: MrSvinia'}
Exception ignored in thread started by: <function client_handler at 0x000002294C3E04A0>
Traceback (most recent call last):
File "C:\Users\niels\PycharmProjects\Charles\server\main.py", line 29, in client_handler
connection.sendall(bytes(recv))
^^^^^^^^^^^
TypeError: 'str' object cannot be interpreted as an integer
recv - это же словарь? Не могу понять где накосячил. Смысл в том, что при получении команд-запросов сервер добавляет в словарь у себя время-дата: ответ на запрос
, а потом по команде acc
отсылает его на клиент, где он выводиться.