UDP-сокеты с Python - PullRequest
       6

UDP-сокеты с Python

0 голосов
/ 13 февраля 2019

Я пытаюсь сделать сервер способным принимать и отправлять данные с использованием udp, я рассмотрел некоторые коды, но они отправляют или получают данные, но не оба, я пытаюсь отправить данные через один порт и получить их через другойОднако я не мог.

Если бы я думал об использовании функции accept (), как в TCP, есть ли аналогичный способ в UDP или лучшее решение?Спасибо

while True:                                                 
  sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  sock.sendto(MESSAGE, (UDP_IP, UDP_PORT1))
  data, addr = sock.recvfrom(1024)
  print data

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Если вы слушаете UDP, вы bind используете порт для сокета.Если вы отправитель, вам не нужно привязывать порт:

эхо-сервер

from socket import *

s = socket(type=SOCK_DGRAM)
s.bind(('localhost',5000))

while True:
    data,addr = s.recvfrom(1024)
    print(data,addr)
    s.sendto(data,addr)

клиент

from socket import *

s = socket(type=SOCK_DGRAM)
s.sendto(b'hello',('localhost',5000))
data,addr = s.recvfrom(1024)
print(data,addr)

Запустите сервер, затем запустите клиент.

Вывод клиента:

C:\>client.py
b'hello' ('127.0.0.1', 5000)

C:\>client.py
b'hello' ('127.0.0.1', 5000)

Вывод сервера:

C:\>server.py
b'hello' ('127.0.0.1', 50391)
b'hello' ('127.0.0.1', 50392)
0 голосов
/ 13 февраля 2019

accept() - это функция только для TCP, она не имеет применения в сетях UDP, поэтому не беспокойтесь об этом, если только вы не пытаетесь использовать TCP.

Что касается отправки данных с одного порта во времяПолучив его от другого, простой способ сделать это - создать два UDP-сокета.Затем вы можете позвонить recvfrom() на одном из них и sendto() на другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...