繁体   English   中英

Python PyQt4:使用QTcpServer处理来自客户端的数据,但我无法接收数据

Python PyQt4: Using QTcpServer to handle data from client, but I can't receive the data

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我很困惑,为什么在官方示例中QTcpSocket实例可以在连接之前将文本发送到客户端。 连接进入后,结果是: New connection came 0 New connection ran into thread: 944

我的代码位于内容的底部,基于官方示例[threadedfortuneserver.py]

# -*- coding: utf-8 -*-
__author__ = 'erliang'
# TODO:消息处理以及UI响应

from PyQt4.QtCore import QThread, pyqtSignal
from PyQt4.QtGui import QMessageBox, QApplication
from PyQt4.QtNetwork import QTcpSocket, QTcpServer, QHostAddress

from ui import ServerWindow


class Socket(QTcpSocket):
    def __init__(self, parent=None):
        super(Socket, self).__init__(parent)
        self.connected.connect(self.on_connected)
        self.disconnected.connect(self.on_disconnected)
        self.readyRead.connect(self.on_ready_read)
        self.error.connect(self.on_error)

    def on_connected(self):
        print "Socket connected!"

    def on_disconnected(self):
        print "Socket disconnected!"

    def on_ready_read(self):
        print "Received data:", self.readAll()

    def on_error(self):
        print "Error occurred:", self.errorString()


class ChatThread(QThread):
    error = pyqtSignal(QTcpSocket.SocketError)

    def __init__(self, socketDescriptor, parent):
        super(ChatThread, self).__init__(parent)

        self.socketDescriptor = socketDescriptor
        self.received_data = None

    def run(self):
        # 在此处新建线程处理客户端消息
        self.tcp = Socket()
        print self.tcp.state()
        print "New connection ran into thread:", self.socketDescriptor
        if not self.tcp.setSocketDescriptor(self.socketDescriptor):
            self.error.emit(self.tcp.error())
            return
        # self.tcp.disconnectFromHost()
        # self.tcp.waitForDisconnected()

class ChatServer(QTcpServer):
    def __init__(self, parent=None):
        super(ChatServer, self).__init__(parent)
        self.newConnection.connect(self.on_new_connection)

    def incomingConnection(self, socketDescriptor):
        # print "New connection came!", socketDescriptor
        self.thread = ChatThread(socketDescriptor, self)
        self.thread.finished.connect(self.thread.deleteLater)
        self.thread.start()

    def on_new_connection(self):
        print "New connection came"


class Server(ServerWindow):
    def __init__(self):
        super(Server, self).__init__()
        self.StartServerButton.clicked.connect(self.start_server)
        self.StopServerButton.clicked.connect(self.stop_server)

        self.chat_server = ChatServer()

        # self.ClientLogTable.setRowCount(2)
        # self.ClientLogTable.setItem(1, 1, QTableWidgetItem('123'))

    def start_server(self):
        # GUi与Socket操作不能在同一线程, 每次打开服务器便新建一个线程
        if not self.chat_server.isListening():
            addr = QHostAddress()
            addr.setAddress('127.0.0.1')
            if not self.chat_server.listen(addr, 8888):
                QMessageBox.critical(self, u"服务器", u"无法初始化服务器: %s." % self.server.errorString())
                self.close()
                return
            self.InfoLabel.setText(u'服务器IP:{0}   端口:{1}'.format(self.chat_server.serverAddress().toString(),
                                                                self.chat_server.serverPort()))

    def stop_server(self):
        if self.chat_server.isListening():
            self.chat_server.close()
            self.InfoLabel.setText(u'服务器尚未启动!')


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    client = Server()
    client.show()
    sys.exit(app.exec_())
问题暂未有回复.您可以查看右边的相关问题.
1 具有Android客户端的QTcpServer无法打印或使用从客户端接收的数据

我正在使用Qt框架在C ++中开发客户端服务器应用程序,但是客户端可以是android手机和计算机(Qt客户端应用程序)现在我在处理服务器端的数据接收方面遇到麻烦; 服务器未正确接收数据。 首先,使用以下发送和接收方法,使服务器(Qt应用程序)和客户端(Qt应用程序)之间的工作正常:消息 ...

2 QTcpServer-客户端接收到奇怪的数据大小

我根据这篇文章写了我的QTcpServer。 套接字在前4个字节(qint32)上插入QByteArray的总字节。 一切看起来都很好 服务器: 服务器输出: 客户: 在客户端上,我做一个循环并验证总大小。 继续接收,直到到达总计: } 问题:在客 ...

3 QTcpServer如何从客户端套接字读取数据

我试图用C ++ / Qt实现一个TCP套接字服务器。 首先,clientConnection本地声明确实起作用。 QTcpSocket * clientConnection = tcpServer-> nextPendingConnection(); 但是,当我尝试在 ...

4 Python客户端无法接收从Python Server发送的数据

我正在尝试将一些数据从我的python客户端发送到python服务器,我已经遵循了此链接 我的python客户端代码如下 python服务器代码是 sendall函数用于将数据发送到客户端,这意味着当我在服务器上的终端中输入文本时,我也应该在客户端上看到它。 但这不会发生 ...

5 使用python从客户端发送和接收数据

我正在使用RS485到wifi路由器 以上型号为Rs485通讯。 我最终用arduino尝试了简单的代码。 每2S通过客户端发送一次串行数据。 我使用下面的python代码从客户端1和客户端2接收数据 现在,我已经上传了Modbus RTU代码,我正在其中发送请求并 ...

6 客户端未使用Python接收数据

我是Python新手,有一个基本问题,网络套接字连接的客户端可以接收数据吗? 在我的问题中,客户端是发起连接的客户端,这也许很明显,但我想明确一点。 我问是因为我有另一个服务器和客户端(都是python),允许服务器从客户端接收文件。 它工作正常,但我无法获得客户端接收文件的示例。 Py ...

8 Android TCP客户端无法使用wifi从TCP Server接收数据

我在使用wifi模块的计算机和android设备之间发送/接收数据时遇到问题。 我的计算机可以从android发送/接收数据,但是android设备无法从计算机接收数据,它只能发送什么错误? 我将计算机设置为TCP Server,而android是TCP Client。 我认为DataIn ...

9 无法使用ZeroMQ接收多个客户端数据

我正在执行该服务器程序,从多个客户端接收,但是在一个客户端的第一条消息之后,服务器正在接收数据,然后它不等待其他客户端请求,而仅显示第一个客户端数据并停止。 另外,我无法成为其他使用同一Linux机器的VM的客户端。 我不确定如何修改它以便让服务器从更多客户端接收。 1.我在不同的 ...

10 无法使用python接收UDP广播数据包客户端

我已经尝试发送广播消息很长时间了,但是却完全无法从另一端接收到它,也没有任何错误。 服务器端它快速发送数据包,客户端一直在监听,但从不打印。 如果有人真的这样做,请回答我。 我正在使用相同Linux ubuntu的两个虚拟机。 一个用于服务器,另一个用于客户端。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM