отправка строки S1 и S2 на сервер в двух разных UDP-пакетах - PullRequest
1 голос
/ 28 апреля 2019

Я полный новичок в сетевом программировании. У меня есть задание, которое просит меня;

КЛИЕНТ запрашивает строку S у пользователя. Затем клиент разбивает строку S, предположительно имеющую длину n, на две строки S1 и S2, которые имеют равную длину n / 2, если n четное, или длин (n + 1) / 2 и (n - 1). / 2 соответственно, если n нечетно. Клиент тогда: 1. отправляет S1 и S2 на сервер в двух разных пакетах UDP; 2. ожидает от сервера строки R в другом UDP-пакете; 3. проверяет, равен ли R конкатенации S2 и S1; 4. отображает результат финального теста для пользователя.

SERVER постоянно ожидает UDP-сообщений. Сервер ожидает последовательности из двух отдельных сообщений UDP, содержащих строки S1 и S2. Затем сервер: 1. получает S1, а затем S2 в двух разных пакетах UDP; 2. создает R как конкатенацию S2, за которой следует S1; 3. отправляет R клиенту как пакет UDP; 4. начинается снова.

import socket 
import sys

HOST = "localhost" 
PORT = 9999 

s = input("Enter a string S: ")
n = len(s)

if (n%2) == 0:
    s1 = s[:(n//2)]
    s2 = s[(n//2):]
    print("String s1 is: "+s1)
    print("String s2 is: "+s2)
else:
    s1 = s[:(n + 1)//2]
    s2 = s[(n + 1)//2:]
    print("String s1 is: "+s1)
    print("String s2 is: "+s2)


sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.sendto(s1.encode() ,(HOST, PORT))
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(s2.encode() ,(HOST, PORT))

received = sock.recv(1024)

received.decode()
if received == s2 + s1:
    print("Sent: "+ s2 + s1) 
    print("Received: "+received)
sock.close()



-------------------------------------------------------------------





import socketserver
class MyUDPHandler(socketserver.DatagramRequestHandler):
    def handle(self): 
        data1 = self.request[0]
        data2 = self.request[0]
        print("Wrote :")
        print(data1.decode())
        print(data2.decode())
        result = data2 + data 1
        self.request[1].sendto(result, self.client_address)


if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
    server = socketserver.UDPServer((HOST, PORT), MyUDPHandler)
    server.serve_forever()

Код работает очень плохо. Это не дает мне s2 + s1. Ему удается только правильно разделить строку S. Я не знаю, что происходит не так. Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...