sri*_*sri 47 python sockets python-3.x
以下是尝试使用套接字修改用户提供的输入的代码:
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()
Run Code Online (Sandbox Code Playgroud)
当我执行它并提供输入时,会发生以下错误:
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'
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
小智 64
这段代码可能对Python 2有用.但在Python 3中,这会引起一个问题,这与位编码有关.我试图制作一个简单的TCP服务器并遇到同样的问题.编码对我有用.用sendto
命令试试吧.
clientSocket.sendto(message.encode(),(serverName, serverPort))
Run Code Online (Sandbox Code Playgroud)
同样.decode()
,如果要完全按照发送方式打印数据,则可以使用UDP服务器端接收数据.
小智 17
编码和解码可以在python 3中解决这个问题:
客户端:
>>> host='127.0.0.1'
>>> port=1337
>>> import socket
>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>> s.connect((host,port))
>>> st='connection done'
>>> byt=st.encode()
>>> s.send(byt)
15
>>>
Run Code Online (Sandbox Code Playgroud)
服务器端:
>>> host=''
>>> port=1337
>>> import socket
>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>> s.bind((host,port))
>>> s.listen(1)
>>> conn ,addr=s.accept()
>>> data=conn.recv(2000)
>>> data.decode()
'connection done'
>>>
Run Code Online (Sandbox Code Playgroud)
Wll*_*iam 11
一点编码可以解决这个问题:
客户端:
message = input("->")
clientSocket.sendto(message.encode('utf-8'), (address, port))
Run Code Online (Sandbox Code Playgroud)
服务器端:
data = s.recv(1024)
modifiedMessage, serverAddress = clientSocket.recvfrom(message.decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
小智 5
只需替换传入的消息参数clientSocket.sendto(message,(serverName, serverPort))
即可clientSocket.sendto(message.encode(),(serverName, serverPort))
。然后你就可以在python3中成功运行了