我正在尝试用python中的UDP做一个简单的“聊天”。我已经完成了客户端和服务器的代码
import socket
fd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM )
udp_ip = '127.0.0.1'
udp_port = 8014
while(True):
message = input("Client :")
fd.sendto(message, (udp_ip, udp_port))
reply = fd.recvfrom(1000)
print("Server:%s"%(reply))
在客户端我得到了
python client.py
Client :'haii'
在服务器端我得到
python server.py
client : 'haii'
server : 'hai there'
Traceback (most recent call last):
File "server.py", line 12, in <module>
fd.sendto(reply, client_address)
Type Error: a bytes-like object is required, not 'str'
如何解决这个问题?有什么问题吗?在
~
好吧:
正如错误所说,您不能直接发送字符串(Python3字符串不仅仅是一个字节容器);您必须首先将其转换为
bytearray
:请注意,您需要指定编码;如果您想一想在字节级别上表示英语中不常见的字符有多不同,这很有意义。这种转换的好处是,使用unicode,您可以用任何语言发送几乎任何文本:
^{pr2}$另一方面,你也会收到一个字节的东西,它必须首先转换成一个字符串;同样,编码也会产生影响,你必须使用与发送相同的编码:
您的
print("%s" % r )
使用默认编码隐式调用str
,但这在网络中很可能不是一个好主意。使用utf-8是将字符串编码为字节的非常好的方法。在提供最少的背景信息:字符串的行为应该像字符串一样,即由字母/字形/符号组成的文本,文本的表示,而不是二进制内存。因此,当将一段内存发送给其他人时,您需要确保您的文本是基于一个公共表示(在本例中为UTF8)的两端都能被理解。在
相关问题 更多 >
编程相关推荐