Отправка данных запрещена? [WinError 10057] - PullRequest
0 голосов
/ 21 июня 2020

Я знаю, что это ошибка серверной части, где используется переменная s, когда должна использоваться переменная conn, но я сижу здесь 2 часа и не вижу ошибки. Ошибка: [WinError 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied Мой код:

import socket
from _thread import *

server = '123.456.78.9'
port = 5555


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    s.bind((server, port))
except socket.error as e:
    str(e)
    
s.listen()
print("Waiting for connections, server has been started")

def threaded_client(conn):
    reply = ""
    conn.sendall(str.encode("[Server, Server]Mis:200:Connected"))
    while True:
        try:
            data = conn.recv(2048)
            reply = data.decode("utf-8")
            
            if not data:
                print("Disconnected from", addr[0])
                break
            
            print("Received: ", reply)
            print("Sending: ", reply)  
            conn.sendall(str.encode(reply))
        except:
            break
    print("Connection to", addr[0], "has been lost!")
    conn.close()

while True:
    conn, addr = s.accept()
    banlist = open('bannedip.bipf')
    if addr[0] in banlist.read():
        conn.sendall(str.encode("[Server, Server]Err:401:Banned"))
        conn.close()
        print("Banned ip", addr[0], ", was disconnected as their ip (", addr[0], ") is listed in the ban file")
    else:
        print("Connected to:", addr[0])
        start_new_thread(threaded_client, (conn,))```

1 Ответ

1 голос
/ 21 июня 2020

Разобрался! Согласно другим проблемам [WinError 10057], сервер отказывается использовать определенную переменную sock. Прошло около 6 часов, и я решил проверить свой клиентский код, и оказалось, что я сначала объявил переменную client обычным сокетом в функции __init__. Затем в моей connect функция принимает эту переменную и изменяет ее как связанную переменную (поэтому в этой функции работают функции send и recv). Затем моя функция отправки перечитывает исходный сокет (без подключения) и использует его для отправки (что не удается). Итак, я сделал очень сложную эквивалентную версию (в словах сервера) выполнения conn, addr = s.accept(), затем создания old_s = s, затем s = conn затем тупо сбросил conn = old_s. Это лучшее, что я могу объяснить, извините, если вы не поняли ни слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...