Я полный новичок в сетевом программировании. У меня есть задание, которое просит меня;
КЛИЕНТ запрашивает строку 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. Я не знаю, что происходит не так. Любая помощь очень ценится.