Paul Sigonoso Paul Sigonoso - 3 months ago 16
Python Question

Difference between UDP server and UDP client: sock.bind((host, port)) is on the client or server side?

The UDP server:

# -*- coding: utf-8 -*-
#!/usr/bin/python3
#server UDP

from socket import *

def main():
# Cria host e port number
host = ""
port = 5000

# Cria socket #UDP
server = socket(AF_INET, SOCK_DGRAM)

# Indica que o servidor foi iniciado
print("Servidor iniciado")

# Bloco infinito do servidor
while True:
# Recebe a data e o endereço da conexão
print("server.recvfrom(1024)",server.recvfrom(1024))
data, endereço = server.recvfrom(1024)

# Imprime as informações da conexão
print("Menssagem recebida de", str(endereço))
print("Recebemos do cliente:", str(data))

# Vamos mandar de volta a menssagem em eco
resposta = "Eco=>" + str(data)
server.sendto(data, endereço)

# Fechamos o servidor
server.close()

if __name__ == '__main__':
main()


The UDP client:

# -*- coding: utf-8 -*-
#!/usr/bin/python3
#client UDP
from socket import *

def main():
# Cria host e port number
host = "localhost"
port = 5000

# O servidor será um par endereço e port
server = (host, port)

# Criamos o socket
sock = socket(AF_INET, SOCK_DGRAM)
sock.bind((host, port))

# Vamos mandar mensagem enquanto a mensagem for diferente de sair (s)
msg = input("-> ")
while msg != 's':
# Mandamos a mensagem através da conexão
sock.sendto(msg.encode(), server)

# Recebemos uma resposta do servidor
data, endereco = sock.recvfrom(1024)

# Imprimimos a mensagem recebida
print("Recebida ->", str(data))

# Podemos mandar mais mensagens
msg = input("-> ")

# Fechamos a conexão
sock.close()

if __name__ == '__main__':
main()


The codes are working but I am not sure what is the server or the client: Difference between UDP server and UDP client: sock.bind((host, port)) is on the client or server side?

Answer

As @VPfB answered, see: What's the purpose of using sendto/recvfrom instead of connect/send/recv with UDP sockets?

The model server/client :

client is the part that iniciate the communication and server is the receiver one.

Client:

# -*- coding: utf-8 -*-
#!/usr/bin/python3

from socket import *

def main():
    # Cria host e port number
    host = "localhost"
    port = 5000

    # O servidor será um par endereço e port
    server = (host, port)

    # Criamos o socket
    sock = socket(AF_INET, SOCK_DGRAM)
    ##sock.bind((host, port)) #server side

    # Vamos mandar mensagem enquanto a mensagem for diferente de sair (s)
    msg = input("-> ")
    while msg != 's':
        # Mandamos a mensagem através da conexão
        sock.sendto(msg.encode(), server) #encode para enviar no formato de bytes

        # Recebemos uma respota do servidor
        data, endereco = sock.recvfrom(1024)

        # Imprimimos a mensagem recebida
        print("Recebida ->", str(data))

        # Podemos mandar mais mensagens
        msg = input("-> ")

    # Fechamos a conexão
    sock.close()

if __name__ == '__main__':
    main()

Server:

# -*- coding: utf-8 -*-
#!/usr/bin/python3


from socket import *

def main():
    # Cria host e port number
    host = ""
    port = 5000

    # Cria socket                  #UDP
    server = socket(AF_INET, SOCK_DGRAM)
    server.bind((host, port))


    # Indica que o servidor foi iniciado
    print("Servidor iniciado")

    # Bloco infinito do servidor
    while True:
        # Recebe a data e o endereço da conexão
        print("server.recvfrom(1024)",server.recvfrom(1024))
        data, endereço = server.recvfrom(1024)

        # Imprime as informações da conexão
        print("Menssagem recebida de", str(endereço))
        print("Recebemos do cliente:", str(data))

        # Vamos mandar de volta a menssagem em eco
        resposta = "Eco=>" + str(data)
        server.sendto(data, endereço)

    # Fechamos o servidor
    server.close()

if __name__ == '__main__':
    main()
Comments