在两个不同的UDP数据包中向服务器发送S1字符串和S2字符串

2024-03-28 15:03:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个网络编程的初学者。我有一项任务要我做

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

服务器不断等待UDP消息。 服务器等待包含字符串S1和S2的两个不同UDP消息序列。 然后服务器: 1在两个不同的UDP包中接收S1和S2; 2将R构造为S2和S1的串联; 三。将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。它只能正确地分割字符串。我不知道出了什么问题。非常感谢您的帮助。你知道吗


Tags: 字符串self服务器hoststringisportsocket