Discuss / Python / 这完全按照老师的来写的,为啥会报错呢,百思不得解

这完全按照老师的来写的,为啥会报错呢,百思不得解

Topic source

蝉的夏

#1 Created at ... [Delete] [Delete and Lock User]
#!/usr/bin/env python3# -*- coding: utf-8 -*-"""socket server exercise program"""__author__ = 'Cicada Luo'import socketimport threadingimport time# 创建一个socket, socket.AF_INET表示指定使用IPV4协议,socket.SOCK_STREAM表示指定使用面向流的TCP协议s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口:传入元组参数(IP地址,端口号)s.bind(('127.0.0.1', 9999))# 监听端口,指定等待连接的最大数量s.listen(5)# 服务器实际处理程序def tcpLink(sock, addr):    print('接收一个新连接,来自%s' % str(addr))    sock.send(b'Welcome!')  # 接收新连接后,服务器发送欢迎字符(byte格式)    while True:        # 接收客户端发送的消息,每次接收1K内容        data = sock.recv(1024)        time.sleep(1)        if not data or data.decode('utf-8') == 'exit':            break        sock.send('Hello %s!' % data.decode('utf-8').encode('utf-8'))    sock.close()    print('关闭来自: %s 的连接' % addr)while True:    # 接收一个等到的新连接    sock, addr = s.accept()    # 创建新线程处理    t = threading.Thread(target=tcpLink, args=(sock, addr))    # 启动线程    t.start()
 sock.send('Hello %s!' % data.decode('utf-8').encode('utf-8'))
TypeError: a bytes-like object is required, not 'str'

蝉的夏

#2 Created at ... [Delete] [Delete and Lock User]
#!/usr/bin/env python3# -*- coding: utf-8 -*-"""socket server exercise program"""__author__ = 'Cicada Luo'import socket
import threading
import time

# 创建一个socket, socket.AF_INET表示指定使用IPV4协议,socket.SOCK_STREAM表示指定使用面向流的TCP协议s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口:传入元组参数(IP地址,端口号)s.bind(('127.0.0.1', 9999))
# 监听端口,指定等待连接的最大数量s.listen(5)


# 服务器实际处理程序def tcpLink(sock, addr):
    print('接收一个新连接,来自%s' % str(addr))
    sock.send(b'Welcome!')  # 接收新连接后,服务器发送欢迎字符(byte格式)    while True:
        # 接收客户端发送的消息,每次接收1K内容        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break        sock.send('Hello %s!' % data.decode('utf-8').encode('utf-8'))
    sock.close()
    print('关闭来自: %s 的连接' % addr)


while True:
    # 接收一个等到的新连接    sock, addr = s.accept()
    # 创建新线程处理    t = threading.Thread(target=tcpLink, args=(sock, addr))
    # 启动线程    t.start()


廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]

仔细对下,看看哪不一样

蝉的夏

#4 Created at ... [Delete] [Delete and Lock User]

啊这...少打了个括号

sock.send(('Hello %s!' % data.decode('utf-8')).encode('utf-8'))

  • 1

Reply