我在Socket编程的时候遇到这个问题:
首先在书上的例程中,并没有出现encode函数。所以在这里,帮同样入坑的同学。
服务器端的程序,以及对应的客户端的程序:
from socket import *
from time import ctime
HOST = 'localhost'
PORT = 55556
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)#这里需要两个参数,一个是主机地址,还有就是端口号
tcpSerSock.listen(8)#监听的最大连接数
while True:
print("Waiting for connection...")
tcpCliSock, addr = tcpSerSock.accept()
print("...connected from:",addr)
while True:
data = tcpCliSock.recv(BUFSIZ).decode("utf-8")
if not data:
break
tcpCliSock.send(('[%s] %s' % (bytes(ctime(),'utf-8'),data)).encode("utf-8"))
#a bytes-like object is required, not 'str'
#之前我不知道怎么回事,因为书上并没有在send函数参数使用encode()函数
#提示的错误就是以上,翻译一下就是需要一个字节对象,而不是字符串
#参考一下数据手册,中decode以及encode函数就明白了
tcpCliSock.send("你好".encode("utf-8"))
tcpCliSock.close()
tcpSerSock.close()
from socket import *
HOST = 'localhost'
PORT = 55556
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data = input('>')
if not data:
break
tcpCliSock.send(data.encode("utf-8"))
data = tcpCliSock.recv(BUFSIZ).decode("utf-8")
if not data:
break
print(data)
tcpCliSock.close();