2016-08-18 20 views
2

UDPサーバ:UDPサーバとUDPクライアントの違い:sock.bind((host、port))はクライアント側かサーバ側か?

# -*- 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クライアント間の違い:靴下.bind((host、port))はクライアント側かサーバー側か?

+2

本当にTCPとのようには、 "サーバ・クライアント" の関係はありません。複数のプログラムが中央プログラムと通信している場合、中央プログラムは「サーバ」と呼ばれ、他のプログラムは「クライアント」と呼ばれることがあります。あるいは、あなたが*サービス*を提供するプログラムを持っていれば、それは "サーバ"と見なされるかもしれませんが、この*サービス*を要求する他のプログラムはどんなものでもクライアントと見なすことができます。 –

+1

@JoachimPileborg、ありがとう。 ?だから、私は((ホスト、ポート)「クライアント」をsock.bindたスクリプトを呼び出した場合、それは間違っているだろう、それはindistinguibleされているサーバ(受信機)側で –

+2

;ここEJPからの回答を参照してください?のhttp:/ /stackoverflow.com/questions/6189831/whats-the-purpose-of-using-sendto-recvfrom-instead-of-connect-send-recv-with-ud – VPfB

答えて

1

@VPfBは答えとして、以下を参照してください。What's the purpose of using sendto/recvfrom instead of connect/send/recv with UDP sockets?

モデルサーバ/クライアント:

クライアントが通信して、サーバが受信機1であるiniciate一部です。

クライアント:

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

サーバー:UDPの場合

# -*- 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() 
関連する問題