Невозможно прочитать сообщение от клиента: UDP python 3 - PullRequest
0 голосов
/ 31 марта 2019

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

вот код со стороны клиента


import socket

UDP_IP = "localhost"

UDP_PORT = 50026

print ("Destination IP:", UDP_IP)
print ("Destination port:", UDP_PORT)


s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)


for x in range (10):

    data = input("Message: ")
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    print(data)
else :
    print("lebih dari 10!!")

    s.sendto(data.encode('utf-8'), (UDP_IP, UDP_PORT))

s.close()

вот результат и код со стороны сервера

import socket

UDP_IP = "localhost"

UDP_PORT = 50026

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.bind((UDP_IP, UDP_PORT))


while True:

    data, address = s.recvfrom(1024)

    print(data)
    print(address)


s.close()

когда я запускаю программу, ничего не происходит.вот запущенная программа The result

1 Ответ

0 голосов
/ 31 марта 2019

Ваша основная проблема - это добавленное вами утверждение else, которое не выполняется. Если вы хотите установить ограничение в 10 после принятия ввода, вы должны напечатать оператор после цикла.

Это код клиента:

import socket
UDP_IP = "127.0.0.1" # It is the same as localhost.
UDP_PORT = 50026

print ("Destination IP:", UDP_IP)
print ("Destination port:", UDP_PORT)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for x in range (10):
    data = input("Message: ")
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    print(data)
    s.sendto(data.encode('utf-8'), (UDP_IP, UDP_PORT))
print("lebih dari 10!!")
s.close()

Edit:

Я не совсем понимаю вашу проблему, но насколько я понимаю, вы хотите показать ограничение на сервере. Таким образом, вы можете сделать это, попробуйте добавить цикл на сервер и получать входные данные только от адреса клиента, чтобы избежать получения дополнительных сообщений.

Код сервера:

import socket

UDP_IP = "127.0.0.1" # It is the same as localhost.

UDP_PORT = 50026

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.bind((UDP_IP, UDP_PORT))

x = 0
while True:
    data, address = s.recvfrom(1024)
    # This block will make sure that the packets you are receiving are from expected address

    # The address[0] returns the ip of the packet's address, address is actually = ('the ip address', port)
    if address[0] != '127.0.0.1':
        continue
    # The logic block ends
    print(data)
    print(address)
    x = x + 1 # This shows that one more message is received.
    if x == 10:
        break # This breaks out of the loop and then the remaining statements will execute ending the program

print("10 messages are received and now the socket is closing.")
s.close()
print("Socket closed")

Я прокомментировал код, поэтому я надеюсь, что вы понимаете код

...