3-х стороннее соединение с узлом UDP Ошибка программирования Python - PullRequest
0 голосов
/ 08 марта 2019

Есть 3 файла кода Python, A, B и C.

A отправляет сообщение B, а B принимает его и пересылает его C, получает и распечатывает. Все 3 из них используют протокол UDP. Я знаю, что мне нужно изменить только несколько строк, но я не могу понять это.

B не связывается с A, и A отправляет сообщение C напрямую. Я получаю ошибки хоста, потому что у меня проблемы с их соединением.

Обратите внимание, необходимо изменить только часть B, но для справки я включил части A и C.

Часть A:

import socket
import sys

if len(sys.argv) != 3:
    print("Useage: python " + sys.argv[0] + " <ip> <listen port>")
    sys.exit(-1)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
    print("Input text:")
    text = sys.stdin.readline().strip()
    s.sendto(text,(sys.argv[1],int(sys.argv[2])))
    if text == "bye":
        break

Часть B:

import socket
import sys

if len(sys.argv) != 2:
    print("Useage: python " + sys.argv[0] + " <listen port>")
    sys.exit(-1)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("0.0.0.0", int(sys.argv[1])))

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("0.0.0.0", int(sys.argv[1])))

print("Waiting..")
while True:
    data, addr = s.recvfrom(1024)
    s.sendto(data,(sys.argv[1],int(sys.argv[2])))
    if data == "bye":
        break

Часть C:

import socket
import sys

if len(sys.argv) != 2:
    print("Useage: python " + sys.argv[0] + " <listen port>")
    sys.exit(-1)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("0.0.0.0", int(sys.argv[1])))
print("Waiting..")
while True:
    data, addr = s.recvfrom(1024)
    data = data.decode("utf-8").replace("\0","")
    print data
    if data == "bye":
        break

1 Ответ

0 голосов
/ 08 марта 2019

Я нашел ответ, должен был включить IP-адрес для кода B, привязав его к A, как видно из кода ниже.

import socket
import sys

if len(sys.argv) != 3:
    print("Useage: python " + sys.argv[0] + " <liseten port>")
    sys.exit(-1)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("0.0.0.0", int(sys.argv[1])))
print("Waiting..")
while True:
    data, addr = s.recvfrom(1024)
    s.sendto(data,("127.0.0.1",int(sys.argv[2])))
    if data.decode("utf-8") == "bye":
        break
...