Сетевое программирование Python UDP recvfrom не работает - PullRequest
0 голосов
/ 30 ноября 2018
This is the server side
import socket

UDP_IP = 'localhost'
UDP_PORT = 6000

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # UDP
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind((UDP_IP, UDP_PORT))

while True:
  data, addr = sock.recvfrom(1024)

   if data:
    sock.sendto(data.upper(),(UDP_IP,UDP_PORT) )
    sock.sendto(UDP_IP,(UDP_IP,UDP_PORT))
#print "sending"

Это сокет импорта на стороне клиента

UDP_IP = 'localhost'
UDP_PORT = 6000  
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # UDP



message = raw_input("Your Message: ")
sock.sendto(message, (UDP_IP, UDP_PORT))

data=sock.recvfrom(1024)
print "receiving"    #this line when running it does not print
localtime= time.asctime(time.localtime(time.time()))
print("Received:",data,"at",localtime)

sock.close()

Как исправить код на стороне клиента для получения данных со стороны сервера?потому что он не распечатывает полученные данные.

1 Ответ

0 голосов
/ 30 ноября 2018
from socket import socket, AF_INET, SOCK_DGRAM


def udp_server(host='localhost', port=3000, buffersize=4096, public=False):
    host = '0.0.0.0' if public else host
    address = (host, port)
    with socket(AF_INET, SOCK_DGRAM) as s:
        s.bind(address)
        while True:
            data, address = s.recvfrom(buffersize)
            print('Received:\t{} from {}'.format(data, address))



def upload_data(payload, host='localhost', port=3000):
    """Upload data to server."""

    if payload:
        try:
            s = socket(AF_INET, SOCK_DGRAM)
            s.sendto(bytearray(payload), (host, port))
        finally:
            s.close()

Запустить сервер на интерпретаторе.Затем, с другой стороны, вызовите `upload_data (b'hello ').

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

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