真爱浮现 2019-12-24 22:38 采纳率: 33.3%
浏览 1393
已结题

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,都失败了,如何修改代码才能正常接受数据呢?求详细一点的说明,谢谢!

  • 写回答

1条回答 默认 最新

  • weixin_42062762 2019-12-25 17:25
    关注

    我翻到一个写好的代码 你客户端 没有连接
    服务端 :
    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()

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大