From 40493467138ca214fe94dc22a2f890845a97d857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D0=BB=D0=B5=D1=80=D0=B8=D1=8F=20=D0=A2=D0=B8?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=B0?= Date: Wed, 4 Feb 2026 17:12:52 +0300 Subject: [PATCH] m --- .gitignore | 216 ++++++++++++++++++++++++++++++++++++++++++++++++++ chatudp.py | 43 ++++++++++ client.py | 8 ++ main.py | 21 +++++ udpclient1.py | 20 +++++ updclient.py | 7 ++ updmain.py | 10 +++ 7 files changed, 325 insertions(+) create mode 100644 chatudp.py create mode 100644 client.py create mode 100644 main.py create mode 100644 udpclient1.py create mode 100644 updclient.py create mode 100644 updmain.py diff --git a/.gitignore b/.gitignore index e69de29..64d49ae 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,216 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[codz] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py.cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +# Pipfile.lock + +# UV +# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# uv.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +# poetry.lock +# poetry.toml + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python. +# https://pdm-project.org/en/latest/usage/project/#working-with-version-control +# pdm.lock +# pdm.toml +.pdm-python +.pdm-build/ + +# pixi +# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control. +# pixi.lock +# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one +# in the .venv directory. It is recommended not to include this directory in version control. +.pixi + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# Redis +*.rdb +*.aof +*.pid + +# RabbitMQ +mnesia/ +rabbitmq/ +rabbitmq-data/ + +# ActiveMQ +activemq-data/ + +# SageMath parsed files +*.sage.py + +# Environments +.env +.envrc +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +# .idea/ + +# Abstra +# Abstra is an AI-powered process automation framework. +# Ignore directories containing user credentials, local state, and settings. +# Learn more at https://abstra.io/docs +.abstra/ + +# Visual Studio Code +# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore +# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore +# and can be added to the global gitignore or merged into this file. However, if you prefer, +# you could uncomment the following to ignore the entire vscode folder +# .vscode/ + +# Ruff stuff: +.ruff_cache/ + +# PyPI configuration file +.pypirc + +# Marimo +marimo/_static/ +marimo/_lsp/ +__marimo__/ + +# Streamlit +.streamlit/secrets.toml \ No newline at end of file diff --git a/chatudp.py b/chatudp.py new file mode 100644 index 0000000..0b800a8 --- /dev/null +++ b/chatudp.py @@ -0,0 +1,43 @@ +import socket +import time + +def broadcast_chat(): + + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + + + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + + sock.bind(('0.0.0.0', 10001)) + + while True: + + sock.settimeout(0.5) + try: + data, addr = sock.recvfrom(1024) + print(f"\n[Сообщение от {addr[0]}] {data.decode()}") + except socket.timeout: + pass + + + try: + + message = input("Ваше сообщение: ") + + if message.lower() == 'exit': + print("Выход из чата...") + break + + + sock.sendto(message.encode(), ('255.255.255.255', 10001)) + print(f"[Вы отправили] {message}") + + except KeyboardInterrupt: + print("\nВыход...") + break + + sock.close() + +if __name__ == "__main__": + broadcast_chat() \ No newline at end of file diff --git a/client.py b/client.py new file mode 100644 index 0000000..934af8a --- /dev/null +++ b/client.py @@ -0,0 +1,8 @@ +import socket + +client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +client.connect(('172.20.10.3', 10000)) +client.sendall(b'hello server') +data = client.recv(1024) +print(f"Ответ от сервера: {data.decode()}") +client.close() \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..8f14be6 --- /dev/null +++ b/main.py @@ -0,0 +1,21 @@ +import socket + +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +server.bind(("0.0.0.0", 10000)) +server.listen(1) +print("TCP сервер запущен") + +while True: + + conn, addr = server.accept() + print(f"Подключение от {addr}") + + data = conn.recv(1024) + if not data: + break + conn.sendall(data.upper()) + + conn.close() + + if data.upper() == b'EXIT': + break \ No newline at end of file diff --git a/udpclient1.py b/udpclient1.py new file mode 100644 index 0000000..d05cfed --- /dev/null +++ b/udpclient1.py @@ -0,0 +1,20 @@ +import socket + +client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +client.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + +# Пробуем разные варианты broadcast адресов +broadcast_addresses = [ + '255.255.255.255', # Общий broadcast + +] + +PORT = 10001 +message = b'HELLO BROADCAST TEST' + +for addr in broadcast_addresses: + print(f"Пробую broadcast на {addr}:{PORT}") + client.sendto(message, (addr, PORT)) + +print("Сообщения отправлены. Запустите сервер на другом компьютере.") +client.close() \ No newline at end of file diff --git a/updclient.py b/updclient.py new file mode 100644 index 0000000..d0daedd --- /dev/null +++ b/updclient.py @@ -0,0 +1,7 @@ +import socket + +client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +client.sendto(b'hello server', ('172.20.10.3', 10001)) +data, _ = client.recvfrom(1024) +print(f"Ответ от сервера: {data.decode()}") +client.close() \ No newline at end of file diff --git a/updmain.py b/updmain.py new file mode 100644 index 0000000..6d0dc06 --- /dev/null +++ b/updmain.py @@ -0,0 +1,10 @@ +import socket + +server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +server.bind(('0.0.0.0', 10001)) +print("UDP сервер запущен") + +while True: + data, addr = server.recvfrom(1024) + print(f"Сообщение от {addr}: {data.decode()}") + server.sendto(data.upper(), addr) \ No newline at end of file