【发布时间】:2016-01-05 08:24:08
【问题描述】:
以下是尝试使用套接字修改用户提供的输入的代码:
from socket import *
serverName = '127.0.0.1'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input('Input lowercase sentence:')
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print (modifiedMessage)
clientSocket.close()
当我执行它并提供输入时,会发生以下错误:
Input lowercase sentence:fdsgfdf
Traceback (most recent call last):
File "C:\srinath files\NETWORKS\UDPclient.py", line 6, in <module>
clientSocket.sendto(message,(serverName, serverPort))
TypeError: a bytes-like object is required, not 'str'
我能做些什么来解决这个问题?
【问题讨论】:
-
第一个参数 (
message) 必须是字节,但您传递的是一个字符串。您应该在发送之前对其进行编码,例如message.encode('utf-8') -
但问题是我需要将字符串传递给服务器而不是字节
-
from socket import * serverName = 'hostname' serverPort = 12000 clientSocket = socket(AF_INET, SOCK_DGRAM) message = input('输入小写句子:') message.encode('utf-8') clientSocket .sendto(message,(serverName, serverPort)) modifiedMessage, serverAddress = clientSocket.recvfrom(2048) print (modifiedMessage) clientSocket.close()
-
网络上的东西是总是字节。服务器需要能够以某种方式理解这些字节。
-
那是因为
message仍然是一个字符串。你需要类似clientSocket.sendto(message.encode('utf-8'), ...)
标签: python python-3.x sockets