通过两个不同的UDP数据包将S1字符串和S2字符串发送到服务器

时间:2019-04-27 22:16:18

标签: python sockets udp

我是网络编程的完整入门者。我有一个作业要我做;

CLIENT提示用户输入字符串S。 然后,客户端将假定长度为n的字符串S拆分为两个字符串S1和S2(如果n为偶数,则长度为n / 2),或者长度为(n + 1)/ 2和(n-1)如果n为奇数,则分别为/ 2。  客户然后: 1.通过两个不同的UDP数据包将S1和S2发送到服务器; 2.在另一个UDP数据包中等待来自服务器的字符串R; 3,检查R是否等于S2和S1的串联; 4.向用户显示最终测试的结果。

SERVER不断等待UDP消息。 服务器等待包含字符串S1和S2的两个不同的UDP消息的序列。 服务器然后: 1.在两个不同的UDP数据包中接收S1,然后接收S2; 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。我不知道怎么了。任何帮助都非常感谢。

0 个答案:

没有答案