python TCP服务端接受数据时recv函数非阻塞究竟如何实现?

这是TCP服务端代码:

import socket
import threading

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 9998))
s.listen(5)
print('Waiting for connection')


def tcplink(sock, addr):
    print('Accept new connection from %s:%s...' % addr)
    sock.send(b'Welcome!')
    buffer = []
    while True:      #接受数据时就卡在这里了
        d = sock.recv(1024)
        if not d:
            break 
        else:
            buffer.append(d)
    sock.send('get it!'.encode('utf-8'))
    print((b''.join(buffer)).decode('utf-8'))
    sock.close()
    print('Connection from %s:%s closed.' % addr)

while True:
    sock, addr = s.accept()
    t = threading.Thread(target=tcplink, args=(sock, addr))
    t.start()

客户端代码:

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 

s.send(b'nihao')
buffer = []
while True:
    d = s.recv(1024)
    if not d:
        break
    else:
        buffer.append(d)
data = b''.join(buffer)
s.close()

print(data.decode('utf-8'))

上网查了很多方式比如settimeout,MSG_DONTWAIT,都失败了,如何修改代码才能正常接受数据呢?求详细一点的说明,谢谢!

我翻到一个写好的代码 你客户端 没有连接
服务端 :
import socket
import time

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("localhost",5555))
s.listen(5)#最大连接5 监听
print("服务器已经运行。。。")
def tcp(sock,addr):
print("接受新的连接请求:",addr)
while True:
data = sock.recv(1024)
time.sleep(1)
if not data or data.decode()=="quit":
break
sock.send(data.decode("utf-8").upper().encode())
sock.close()
print("关闭%s的连接" % addr)
while True:
sock,addr = s.accept()#等待接受
tcp(sock,addr)
#这里是等待下一个连接
客户端:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("localhost",5555))
while True:
data = input("输入你要发送的数据:")
s.send(data.encode())
if data=="quit":
break
print(s.recv(1024).decode("utf-8"))

s.close()