首页 > 解决方案 > 客户端和服务器之间的套接字编程以将小写单词/句子转换为大写单词/句子

问题描述

我刚开始使用python,我正在尝试运行一个代码,其中客户端以小写形式向服务器发送消息,并且服务器以大写形式返回输出。代码运行正常,但输出为:

Message from Server b"MESSAGE FROM CLIENT:B'POLL OIUOIU IUO'"

我在 : 之后得到了那个“B”,就像我展示的那样⬆️

客户端的代码:

import socket

 

msgFromClient       = input('Enter a word/sentence in lower case: ')

bytesToSend         = str.encode(msgFromClient)

serverAddressPort   = ("127.0.0.1", 20001)

bufferSize          = 1024

 

# Create a UDP socket at client side

UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)

 

# Send to server using created UDP socket

UDPClientSocket.sendto(bytesToSend, serverAddressPort)

 

msgFromServer = UDPClientSocket.recvfrom(bufferSize)

 

msg = "Message from Server {}".format(msgFromServer[0])

print(msg)

服务器代码:

import socket

 

localIP     = "127.0.0.1"

localPort   = 20001

bufferSize  = 1024

 

msgFromServer       = "Hello UDP Client"

#bytesToSend         = str.encode(msgFromServer)

 

# Create a datagram socket

UDPServerSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)

 

# Bind to address and ip

UDPServerSocket.bind((localIP, localPort))

 

print("UDP server up and listening")

 

# Listen for incoming datagrams

while(1):

    #message,bytesAddressPair = UDPServerSocket.recvfrom(bufferSize)
    message,address = UDPServerSocket.recvfrom(bufferSize)

    #message = bytesAddressPair[0]

    #address = bytesAddressPair[1]

    clientMsg = f'Message from Client:{message}'
    clientIP  = f"Client IP Address:{address}"
    
    print(clientMsg)
    print(clientIP)
    bytesToSend         = str.encode(clientMsg.upper())

   

    # Sending a reply to client

    UDPServerSocket.sendto(bytesToSend, address)

如何仅从服务器获得回复,例如:

来自服务器的消息:POLL OIUOIU IUO

(任何从小写转换为大写的句子/单词)

请帮忙。谢谢!

标签: pythonpython-3.xsocketspython-requests

解决方案


有两个错误。每端一个。这是由于使用repr()了字节,在将其格式化为字符串时使用。这也是增加周围环境的原因'...'。有两个错误,一个由 指示,b另一个由B(b.. 的大写)指示。

首先将字节转换为字符串,以修复b错误:

bytesFromServer, _ = UDPClientSocket.recvfrom(bufferSize)
msgFromServer = bytesFromServer.decode()

B错误源于:

message,address = UDPServerSocket.recvfrom(bufferSize)

将消息重命名为 messageBytes 或类似名称,并如上所示正确解码。


推荐阅读