У меня возникли проблемы с программированием сокетов. Я начал изучать эту тему и создал небольшое приложение эхо-сервер/клиент из руководства, после чего я создал его многопоточную версию для нескольких клиентов. Он отлично работает со следующим кодом:
Сервер:
from Rest_Endpoint.thread import ConnectionThread
HOST = ''
PORT = 6000
def start_server():
server: socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
server.bind((HOST,PORT))
server.listen(10)
print('listen to port', PORT)
server.setblocking(False)
while True:
try:
conn, addr = server.accept() # Will throw BlockingIOError if no connections
print('Connected by:', addr)
thread_spawn(conn, addr)
except BlockingIOError:
# No incoming connection; continue the loop
continue
except Exception as e:
print(f'Unexpected error: {e}')
break
def thread_spawn(conn, addr):
print('spawn new connection thread')
ConnectionThread(conn=conn, addr=addr).run()
def main():
start_server()
if __name__ == '__main__':
main()
Созданная тема:
import threading
class ConnectionThread(threading.Thread):
def __init__(self,conn,addr, **kwargs) -> None:
self.conn = conn
self.addr = addr
super().__init__()
def handle_data(self):
print('Connected by', self.addr)
while True:
print(f' waiting for message {self.__repr__()}')
data = self.conn.recv(1024)
if data:
print('prints data: ')
print(data)
self.conn.sendall(data)
def run(self) -> None:
self.handle_data()
Клиент:
# Echo client program
import socket
HOST = '' # The remote host
PORT = 6000 # The same port as used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
# Connect to the server
s.connect((HOST, PORT))
print(f'Connected to server at {HOST}:{PORT}')
while True:
# message = input()
# bmessage = (message + '\n').encode('utf-8')
s.sendall(b'test')
# print(bmessage)'
except ConnectionRefusedError:
print(f"Could not connect to server at {HOST}:{PORT}. Ensure the server is running.")
except Exception as e:
print(f"An error occurred: {e}")
Когда я запускаю клиентскую программу, я получаю следующее:
Connected by ('127.0.0.1', 51804)
waiting for message
prints data:
b'testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest'
Я понимаю, что tcp — это поток, и из-за while True Loop я получаю этот результат нескольких тестов подряд.
Но когда я пытаюсь переключить клиентский код на:
while True:
message = input()
bmessage = (message).encode('utf-8')
s.sendall(b'test')
print(bmessage)
Я не получаю никаких сообщений на стороне сервера и не понимаю, почему. Подключается, но данных не получаю.
Может кто-нибудь поможет мне с объяснением.
Этот клиентский код не работает:< /p>
# Echo client program
import socket
HOST = '' # The remote host
PORT = 6000 # The same port as used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
# Connect to the server
s.connect((HOST, PORT))
print(f'Connected to server at {HOST}:{PORT}')
while True:
message = input()
bmessage = (message).encode('utf-8')
s.sendall(b'test')
print(bmessage)
except ConnectionRefusedError:
print(f"Could not connect to server at {HOST}:{PORT}. Ensure the server is running.")
except Exception as e:
print(f"An error occurred: {e}")
Подробнее здесь: https://stackoverflow.com/questions/793 ... ceive-data
Почему сокет моего сервера не получает данные? ⇐ Python
Программы на Python
-
Anonymous
1737321132
Anonymous
У меня возникли проблемы с программированием сокетов. Я начал изучать эту тему и создал небольшое приложение эхо-сервер/клиент из руководства, после чего я создал его многопоточную версию для нескольких клиентов. Он отлично работает со следующим кодом:
Сервер:
from Rest_Endpoint.thread import ConnectionThread
HOST = ''
PORT = 6000
def start_server():
server: socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
server.bind((HOST,PORT))
server.listen(10)
print('listen to port', PORT)
server.setblocking(False)
while True:
try:
conn, addr = server.accept() # Will throw BlockingIOError if no connections
print('Connected by:', addr)
thread_spawn(conn, addr)
except BlockingIOError:
# No incoming connection; continue the loop
continue
except Exception as e:
print(f'Unexpected error: {e}')
break
def thread_spawn(conn, addr):
print('spawn new connection thread')
ConnectionThread(conn=conn, addr=addr).run()
def main():
start_server()
if __name__ == '__main__':
main()
Созданная тема:
import threading
class ConnectionThread(threading.Thread):
def __init__(self,conn,addr, **kwargs) -> None:
self.conn = conn
self.addr = addr
super().__init__()
def handle_data(self):
print('Connected by', self.addr)
while True:
print(f' waiting for message {self.__repr__()}')
data = self.conn.recv(1024)
if data:
print('prints data: ')
print(data)
self.conn.sendall(data)
def run(self) -> None:
self.handle_data()
Клиент:
# Echo client program
import socket
HOST = '' # The remote host
PORT = 6000 # The same port as used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
# Connect to the server
s.connect((HOST, PORT))
print(f'Connected to server at {HOST}:{PORT}')
while True:
# message = input()
# bmessage = (message + '\n').encode('utf-8')
s.sendall(b'test')
# print(bmessage)'
except ConnectionRefusedError:
print(f"Could not connect to server at {HOST}:{PORT}. Ensure the server is running.")
except Exception as e:
print(f"An error occurred: {e}")
Когда я запускаю клиентскую программу, я получаю следующее:
Connected by ('127.0.0.1', 51804)
waiting for message
prints data:
b'testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest'
Я понимаю, что tcp — это поток, и из-за while True Loop я получаю этот результат нескольких тестов подряд.
Но когда я пытаюсь переключить клиентский код на:
while True:
message = input()
bmessage = (message).encode('utf-8')
s.sendall(b'test')
print(bmessage)
Я не получаю никаких сообщений на стороне сервера и не понимаю, почему. Подключается, но данных не получаю.
Может кто-нибудь поможет мне с объяснением.
Этот клиентский код не работает:< /p>
# Echo client program
import socket
HOST = '' # The remote host
PORT = 6000 # The same port as used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
# Connect to the server
s.connect((HOST, PORT))
print(f'Connected to server at {HOST}:{PORT}')
while True:
message = input()
bmessage = (message).encode('utf-8')
s.sendall(b'test')
print(bmessage)
except ConnectionRefusedError:
print(f"Could not connect to server at {HOST}:{PORT}. Ensure the server is running.")
except Exception as e:
print(f"An error occurred: {e}")
Подробнее здесь: [url]https://stackoverflow.com/questions/79369373/why-does-my-server-socket-not-receive-data[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия