Как отправить переменную из одной программы на локальном компьютере в другую программу на том же компьютере с использованием Python?

Как можно установить соединение между двумя локальными компьютерами для передачи переменной из одного скрипта в другой с использованием библиотеки socket? Возникает ошибка "WinError 10049: Требуемый адрес для своего контекста неверен" при попытке привязать сокет к адресу компьютера. Как исправить эту проблему и установить успешное соединение между компьютерами?
  • 16 декабря 2023 г. 14:38
Ответы на вопрос 2
Для отправки переменной из одной программы на локальном компьютере в другую программу на том же компьютере с использованием Python можно использовать механизм межпроцессного взаимодействия. Вариантов для этого достаточно много, но одним из наиболее простых является использование модуля subprocess.

Ниже приведен пример, как можно отправить переменную из одной программы в другую программу:

send.py:
```python
import subprocess

variable = "Привет, мир!"
subprocess.run(['python', 'receive.py', variable])
```

receive.py:
```python
import sys

variable = sys.argv[1]
print("Получено значение переменной:", variable)
```

При выполнении send.py, значение переменной "Привет, мир!" будет передано в программу receive.py, которая выведет это значение на экран.

Что касается проблемы с установлением соединения между двумя локальными компьютерами с использованием библиотеки socket и возникшей ошибки "WinError 10049: Требуемый адрес для своего контекста неверен", она может возникать при попытке связи с неправильным адресом или портом.

Вам понадобится указать правильные адрес и порт для подключения. 

Пример клиентской программы:
```python
import socket

HOST = '127.0.0.1'  # Локальный адрес сервера
PORT = 12345        # Порт, который будет слушать сервер

data = "Привет, сервер!"

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(data.encode())
    response = s.recv(1024)

print('Получен ответ от сервера:', response.decode())
```

Пример серверной программы:
```python
import socket

HOST = '127.0.0.1'  # Локальный адрес сервера
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('Подключение с адресом', addr)
        data = conn.recv(1024)
        print('Получены данные от клиента:', data.decode())
        conn.sendall(b'Спасибо за сообщение!')
```
Обратите внимание, что этот код не имеет проверок на ошибки и дополнительных условий, таких как обработка отключения клиента или наличие передачи данных. Это просто примеры, которые можно использовать для отправки данных между двумя локальными программами с использованием сокетов.
Comp_server.  Здесь должно быть указано имя того компьютера, на котором запускается серверная часть. 

На сервере - можно указать ip 0.0.0.0. Это означает слушать данный порт на всех интерфейсах. Но на клиенте, в этом поле надо указать ip адрес сервера. Если указываете имя, то оно должно правильно резолвится в ip адрес.

Для выяснения своего ip используйте команду
ipconfig /all
Для проверки связи используйте на клиенте
ping здесь_указать_ip_или_имя_сервера.

На сервере может так же мешать firewall.
На время тестов - отключите его. По хорошему - надо прописывать правила для нужных портов.
Похожие вопросы