python - UDP 服务器和 UDP 客户端之间的区别 : sock. bind((host, port)) 是在客户端还是服务器端?

标签 python python-3.x

UDP 服务器:

# -*- 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()

UDP 客户端:

# -*- 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()

代码有效,但我不确定服务器或客户端是什么:UDP 服务器和 UDP 客户端的区别:sock.bind((host, port)) 是在客户端还是服务器端?

最佳答案

正如@VPfB 的回答,请参阅:What's the purpose of using sendto/recvfrom instead of connect/send/recv with UDP sockets?

模型服务器/客户端:

客户端是发起通信的部分,服务器是接收者。

客户:

# -*- 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()

服务器:

# -*- 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()

关于python - UDP 服务器和 UDP 客户端之间的区别 : sock. bind((host, port)) 是在客户端还是服务器端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028505/

相关文章:

python:奇怪的列表元素组合

python - 如何将未压缩的视频从 FFMPEG 子进程传输到 python?

python - 在Python中,如何获取模块内文件目录的路径

python - Django 1.7 多个数据库 - 操作错误 : (2006, 'MySQL server has gone away' )重置连接

python - Python 中的 URL 树遍历器?

python - 有没有从多个列表中选择多个项目的功能

django - 如何在 django 中创建 2 级管理员用户,每个用户将只管理他创建的用户?

python - 解释python中的嵌套列表

python - 如何在 Jupyter Notebook 中从 URL 插入图像(Markdown)

python - 使用 Sqlite3 的数据库