Я пытаюсь исправить эту ошибку с прошлых 3 дней, и я постепенно устаю от нее, может кто-нибудь указать мне правильное направление, пожалуйста?
Итак, я написал 2 скрипта, один - сервер, а другой - клиент.
Server.py
#!/usr/python
import socket
import os
port = 3000
def clear():
os.system('clear')
print("-:-:-:-:-:Server:-:-:-:-:-")
#Starting Server
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
host = socket.gethostname()
serversocket.bind((host, port))
serversocket.listen(1)
clear()
clientsocket, addr = serversocket.accept()
print("Connection from: " + str(addr))
while True:
msg = raw_input(" ->")
if msg == "help":
clear()
print("+-----------------------------------+")
print("| Help Menu |")
print("+-----------------------------------+")
print("| help - shows help menu |")
print("+-----------------------------------+")
print("| clear - clears |")
print("+-----------------------------------+")
raw_input("Press ANY key to return")
clear()
elif msg == "clear":
clear()
else:
msg = str(msg).encode("UTF-8")
clientsocket.send(msg)
msg = clientsocket.recv(4096)
print(msg.decode("UTF-8"))
и
Client.py
#!/usr/python
import socket
import time
def send(msg):
try:
s.send(msg.encode("UTF-8"))
except:
Connect()
def getInstructions():
try:
while True:
msg = s.recv(4096)
inst = msg.decode("UTF-8")
time.sleep(5)
send("!")
except:
Connect()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
def Connect():
try:
print("Connect() connecting to: "+ str(host) + str(3000))
s.connect((host, 3000))
getInstructions()
except:
time.sleep(1)
print("Connect() Exception")
Connect()
Connect()
Вкратце, то, что делают мои программы, это
Сервер запускается и ожидает входящего трафика
Клиент запускается и отправляет трафик на сервер
Клиент отправляет каждые 5 секунд строку (в данном случае "!"), Если сервер не получает его, клиент пытается повторно подключиться к серверу, и здесь возникает проблема, клиент не подключается повторно, он застрял внутри Цикл Connect (), поскольку он больше не может подключаться
Я пытался всегда создавать новый сокет при переподключении
Client.py
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
def Connect():
try:
print("Connect() connecting to: "+ str(host) + str(3000))
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 3000))
getInstructions()
except:
time.sleep(1)
print("Connect() Exception")
Connect()
И это, казалось, каким-то образом решило проблему, клиент смог повторно подключиться к серверу, но эта строка действительно нарушила код, клиент был показан как подключенный сервером, но клиент не получил никаких данных, которые были отправлены.
И еще кое-что, что может быть полезно сказать: клиент подключается к серверу, а затем я останавливаю сервер, клиент переходит в «режим переподключения», а затем я снова запускаю сервер, ничего не происходит, клиент все еще пытается восстановить соединение (но не удается). Сейчас мне нужно перезапустить клиент, чтобы восстановить соединение, и это не совсем то, что я ищу ..