python阻塞套接字,发送立即返回

标签 python sockets multithreading blocking send

我正在Python中使用socket模块编写一个多线程套接字应用程序。 服务器监听连接,当它获得连接时,它会为该套接字生成一个线程。

服务器线程向客户端发送一些数据。但客户还没有准备好接收它。我认为这会导致服务器等待客户端开始接收但立即返回

然后客户端调用处于阻塞状态的recv,并且没有收到任何数据。

客户端套接字构造函数

self.__clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.__clientSocket.connect((server, port))

服务器套接字构造函数

        self.servSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.servSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        #self.servSock.settimeout(None)
        self.servSock.setblocking(1)
        self.servSock.bind((self.addr,self.port))
        self.servSock.listen(5)

监听接受线程

    try:
        (cs, address) = self.servSock.accept()
    except socket.timeout:
        return
    threadName = '\r\nClient %s:%s\r\n' % (cs, address)
    print threadName
    clientSocketHandler = ClientSocket()
    clientSocketHandler.setClientSocket(cs)
    self.clients.newThread(self.clientFunc, {clientSocketHandler : "1"}, threadName).start()

服务器和客户端从 ClientSocket 内部发送/接收方法

receivedData = self.__clientSocket.recv(1024*1024)

self.__clientSocket.send(s)

有什么想法为什么 send() 会立即返回吗?

最佳答案

any ideas why send() is returning straight away?

send() 所做的只是填充网络缓冲区并返回发送的字节数。

如果您希望发送仅阻止从客户端接收确认消息。

关于python阻塞套接字,发送立即返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2432814/

相关文章:

c# - 以正确的顺序捕获进程 stdout 和 stderr

python - 递归减少元组列表

python - 系统地遍历 DF 的多列和多行,以跨多列输出不同的列表大小

Python 包安装在 AmazonLinux 上

c - 无法理解 select() 中 write_fds 的使用 - c

multithreading - 为什么 Go 被认为是部分抢占式的?

python - 如何将日期时间转换为正确的格式以使用 pytz 模块

python - spark python API java_gateway套接字连接错误

c - 在线程中使用select()不会对操作系统主机断开连接使用react

C++ 11 替代 pthread_cond_timedwait