首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UDP服务器和UDP客户端的区别:sock.bind((主机,端口))在客户端还是在服务器端?

UDP服务器和UDP客户端的区别:sock.bind((主机,端口))在客户端还是在服务器端?
EN

Stack Overflow用户
提问于 2016-08-19 06:32:38
回答 1查看 245关注 0票数 2

UDP服务器:

代码语言:javascript
复制
# -*- 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客户端:

代码语言:javascript
复制
# -*- 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((主机,端口))在客户端还是服务器端?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-21 23:34:06

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

模型服务器/客户端:

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

客户端:

代码语言:javascript
复制
# -*- 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()

服务器:

代码语言:javascript
复制
# -*- 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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39028505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档