Код работает только в pycharm

Я написал программу для передачи файлов по TCP с помощью кода, вот файл sender.py:

import time
import random
import string
import socket
import codecs
from socket import SOL_SOCKET, SO_REUSEADDR

SERVER_HOST = "0.0.0.0"
port = ''
code = ''
filename=input("Enter your file: ")
file = codecs.open(filename, "rb")
while True:
    for i in range(5):
        codee = random.choice(string.ascii_letters.lower())
        code += codee
        port += str(string.ascii_letters.lower().find(codee) + 1)
    if int(port[:5]) < 65535:
        break
port = int(port[:5])
SERVER_PORT = port
client_sockets = set()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind((SERVER_HOST, SERVER_PORT))
s.listen(2)
print(f"[*] Tell second user to enter code: {code}")
client_socket, client_address = s.accept()
msg = client_socket.recv(1024).decode()
l = file.read(1024)
if msg == f"{code}":
    client_socket.send(filename.encode('utf-8'))
    while (l):
        client_socket.send(l)
        l = file.read(1024)
    client_socket.send(b'Done')
file.close()
s.close()
print("File transfered successfully ✔")
input()

И reciever.py:

import time
import socket
import string
import codecs
SERVER_HOST = "127.0.0.1"
port = ''
code = input("Enter your code: ").replace("'", "").replace(" ", "")
for i in range(5):
    try:
        codee = code[i]
    except:
        print("Invalid code")
        input()
        exit()
    port += str(string.ascii_letters.lower().find(codee) + 1)
port = int(port[:5])
SERVER_PORT = port
s = socket.socket()
s.settimeout(3)
print(f"[*] Connecting to server: {code}...")
try:
    s.connect((SERVER_HOST, SERVER_PORT))
except:
    print("Invalid code")
    input()
    exit()
print("[+] Connected.")
s.send(code.encode())
filename = s.recv(1024).decode('utf-8')
print("Recieving filename...")
l = s.recv(1024)
print("Recieving file...")
output = open(filename, "wb")
while (l):
    if l == b"Done":
        break
    output.write(l)
    try:
        l = s.recv(1024)
    except socket.timeout:
        print("Timeout")
output.close()
s.shutdown(socket.SHUT_WR)
s.close()
output.close()
print("File Downloaded successfully ✔")
input()

Дело в том, что при запуске кода через pycharm все работает, но если запустить код напрямую через python - файл начинает бесконечно заполнятся с ошибкой таймаут, и к нему добавляется слово Done, которое должно останавливать цикл с передачей файла. Заранее спасибо.


Ответы (1 шт):

Автор решения: Zailox

Socket слишком быстро отправлял 2 ответа, из-за чего они миксовались, нужно было поставить sleep перед s.send()

→ Ссылка