


Python socket как передавать информацию между двумя устройствами
можно ли сделать программу на python с библиотекой socket, что бы можно было передавать на расстояние информацию между двумя компьютерами, если да, то нужно ли тратить деньги на создание айпи или что то в этом духе, просто когда я пытался сделать сервер клиент с другого устройства просто не мог подключится. я знаю что можно использовать такую программу как radmin VPN, хотел бы найти способ без внешних программ.
Сервер
import socket
HOST = '' # Пустая строка означает, что сервер слушает на всех доступных интерфейсах
PORT = 5000 # Выбранный порт
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
print(f"Сервер запущен. Ожидание подключения на порту {PORT}")
conn, addr = s.accept()
with conn:
print(f"Подключился {addr}")
while True:
data = conn.recv(1024)
if not data:
break
print(f"Получено: {data.decode()}")
conn.sendall(data) # Эхо: отправляем обратно те же данные
Клиент
import socket
HOST = 'IP_сервера' # Замените на IP-адрес сервера
PORT = 5000 # Тот же порт, что и у сервера
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Привет, сервер!')
data = s.recv(1024)
print('Получено от сервера:', data.decode())
Всё довольно просто — на сервере запускаете слушающий сокет на нужном порту, а на клиенте подключаетесь по IP-адресу сервера, не забывая при этом проверить, что брандмауэр или антивирус не блокирует соединение; если же устройства находятся в разных сетях через Интернет, то нужно настроить на роутере переадресацию (port forwarding), чтобы внешний запрос шел к вашему серверу, а если IP динамический, то можно воспользоваться сервисом динамического DNS для связывания IP с доменным именем, и при этом вовсе не требуется тратить деньги на получение специального IP — большинство интернет-провайдеров уже предоставляют публичный IP, просто в настройках роутера и сети следует правильно учитывать работу NAT и firewall.
Да, вы можете создать программу на Python с использованием библиотеки `socket` для передачи данных между компьютерами через интернет **без платных услуг** и внешних программ. Вот как это сделать:
---
### 1. Основные принципы:
- **Сервер** слушает на определенном IP-адресе и порту.
- **Клиент** подключается к IP-адресу и порту сервера.
- Для связи через интернет вам понадобится **внешний IP-адрес** сервера (обычно предоставляется провайдером).
---
### 2. Пример кода:
#### Сервер (на принимающем компьютере):
```python
import socket
# Настройки сервера
HOST = '0.0.0.0' # Слушать все интерфейсы
PORT = 12345
with socket.socket( socket.AF _INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
data = conn.recv(1024)
print("Received:", data.decode())
conn.sendall(b"Message received!")
```
#### Клиент (на отправляющем компьютере):
```python
import socket
# Настройки подключения
HOST = 'IP_СЕРВЕРА' # Заменить на внешний IP сервера
PORT = 12345
with socket.socket( socket.AF _INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b"Hello from client!")
data = s.recv(1024)
print("Received:", data.decode())
```
---
### 3. Настройка для работы через интернет:
1. **Узнайте внешний IP сервера**:
- Перейдите на сайт [ ipinfo.io ](ipinfo.io) на серверном компьютере.
- Используйте полученный IP в клиенте.
2. **Проброс портов (Port Forwarding)**:
- Зайдите в настройки роутера серверного компьютера.
- Перенаправьте порт (например, `12345`) на локальный IP серверного компьютера в локальной сети.
- Инструкции для разных роутеров: [ portforward.com ]( https://portforward.com/ ).
3. **Проверьте брандмауэр**:
- Разрешите входящие соединения на выбранном порту.
---
### 4. Если нет внешнего IP:
- **Динамический DNS (бесплатные варианты)**:
Используйте сервисы вроде [No-IP]( https://www.noip.com/ ) или [DuckDNS]( https://www.duckdns.org/ ), чтобы получить доменное имя для динамического IP.
---
### 5. Локальная сеть:
Если компьютеры в одной локальной сети:
- Используйте локальный IP сервера (например, `192.168.x.x`).
- Отключите фаерволы на время теста.
---
### 6. Почему может не работать:
- **Неправильный IP/порт** в клиенте.
- **Брандмауэр/роутер** блокирует соединение.
- Провайдер блокирует порты (часто для портов ниже 1024).
---
### 7. Безопасность:
- Не оставляйте порты открытыми постоянно.
- Добавьте аутентификацию или шифрование (например, с помощью `ssl`).
---
### Пример через интернет:
1. Сервер запущен на компьютере с внешним IP `95.123.45.67`.
2. В клиенте указать:
```python
HOST = '95.123.45.67'
PORT = 12345
```
3. Роутер перенаправляет порт `12345` на серверный ПК.
Теперь клиент может подключиться из любой точки мира! 🌍
Тебе нужен статический IP, посмотри условия у своего провайдера как его получить.