Socket | Можете дать готовый пример с сокетами?
Просмотрел куча разных решениях и он с одной стороны помог мне с одной ошибкой, но появилась другая, гуглю уже 30 мин и найти свежий ответ не могу
Server
import socket
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.bind(('',8989))
soc.listen(1)
con, addr = soc.accept()
while True:
data = soc.recv(1024).decode()
- OSError: [WinError 10057] Запрос на отправку или получение данных on a datagram socket using a sendto call) no address was supplied
Client
import socket
soc = socket.socket()
soc.connect(('127.0.0.1',8989))
soc.send("hello, world!".encode())
data = soc.recv(1024)
- ConnectionResetError: [WinError 10054] Удаленный хост принудительно разорвал существующее подключение
Ответы (1 шт):
Автор решения: MarianD
→ Ссылка
В вашем коде для сервера 2 недостатка:
- Вместо
socket.socket()используйтеsocket.create_server(), - вместо исходного сокета
socиспользуйте сокетcon(возвращенный методом.accept()).
Значит, правильный код будет
import socket
soc = socket.create_server(("127.0.0.1", 8989))
soc.listen(1)
con, addr = soc.accept()
while True:
data = con.recv(1024).decode()
print(data) # чтобы вы увидели какой-то результат!
con.send(("Received: " + data).encode()) # возможно ответить
В коде клиента только один недостаток — сообщение "hello, world!" не будет отправлено серверу, потому что
- всякое сообщение в сети нужно закончить символом
\n, иначе не возможно узнать, что поток байтов нужно отправить (аналогично Enter после написания команды):
import socket
soc = socket.socket()
soc.connect(('127.0.0.1',8989))
soc.send("hello, world!\n".encode()) # <-------------- здесь добавлено \n
data = soc.recv(1024)
print(data.decode()) # чтобы увидеть ответ от сервера