私はマルチクライアントサーバーを作成しようとしてきましたが、最終的には完全に機能しましたが、今やりたいことは、クライアントのアドレスを取得する代わりに、クライアントに名前を入力させることです。 「127.0.0.1: こんにちはみんな」の代わりに「ボブ: こんにちはみんな」。
Python docs の既製のサーバーとクライアントを使用しました。サーバーは次のとおりです。
import socketserver
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
name = self.request[0].strip()
socket = self.request[1]
print(name,"wrote:".format(self.client_address[0]))
print(data)
socket.sendto(data.upper(), self.client_address)
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = socketserver.UDPServer((HOST, PORT), MyUDPHandler)
server.serve_forever()
そして、ここにクライアントがあります:
import socket
import sys
HOST, PORT = "localhost", 9999
data = "".join(sys.argv[1:])
name = "".join(sys.argv[1:])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(bytes(name + "Bob", 'utf-8'), (HOST, PORT))
sock.sendto(bytes(data + "hello my name is Bob", "utf-8"), (HOST, PORT))
received = str(sock.recv(1024), "utf-8")
print("Sent: {}".format(data))
print("Received: {}".format(received))
すべて正常に動作しますが、何らかの理由で、クライアントが接続するとサーバーでこれを取得します。
b'Bob' wrote:
b'Bob'
b'hello my name is bob' wrote:
b'hello my name is bob'
私はそれが次のようになりたい:
Bob wrote:
b'Hello my name is bob'
誰かが私を助けてくれることを願っています、ありがとう。