- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我仅使用套接字库和线程制作了一个聊天应用程序,只是为了好玩,但现在我正在尝试制作它的 GUI 版本。我试图有一个选择你的名字的第一个窗口和你发送消息等的第二个窗口。我的名字窗口可以用于接收消息,但我的文本窗口不能用于接收消息,我得到:
[WinError 10022] An invalid argument was supplied.
#SIMPLE SERVER
import socket
import threading
connections = []
def handler(conn, addr):
while True:
try:
msg = conn.recv(1024).decode("utf-8")
except:
break
for x in connections:
x.send(f"{addr[0]}: {msg}".encode("utf-8"))
def start():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostbyname(), 8888))
s.listen(5)
while True:
conn, addr = s.accept()
t = threading.Thread(target=handler, args=(conn, addr))
t.start()
start()
#PYQT5 BASIC CLIENT
import socket
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QThreadPool, QThread
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
#removed setup so it does not look overwelming
self.c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.c.connect((socket.gethostname(), 8888))
self.lineEdit.returnPressed.connect(self.sendmsg)
self.thread = QThread()
self.thread.start(self.recieve())
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
def sendmsg(self):
self.c.send(self.lineEdit.text().encode("utf-8"))
self.lineEdit.clear()
def recieve(self):
while True:
msg = self.c.recv(1024).decode("utf-8")
if msg:
txt = txt + msg + "\n"
self.plainTextEdit.setPlainText(txt)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
最佳答案
您的代码在处理线程时有几个错误:
self.thread.start(self.recieve())
没有意义,看起来您将 QThread 与 python 线程混淆了。 import socket
from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self._socket = QtNetwork.QTcpSocket(self)
self.lineEdit = QtWidgets.QLineEdit()
self.plainTextEdit = QtWidgets.QPlainTextEdit(readOnly=True)
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
lay = QtWidgets.QVBoxLayout(central_widget)
lay.addWidget(self.lineEdit)
lay.addWidget(self.plainTextEdit)
self.socket.readyRead.connect(self.receive_message)
self.lineEdit.returnPressed.connect(self.send_message)
self.socket.connected.connect(self.on_connected)
self.socket.disconnected.connect(self.on_disconnected)
try:
server_name = socket.gethostbyname()
except:
server_name = socket.gethostbyname(socket.gethostname())
self.socket.connectToHost(QtNetwork.QHostAddress(server_name), 8888)
self.lineEdit.setEnabled(False)
@property
def socket(self):
return self._socket
def send_message(self):
msg = self.lineEdit.text()
self.socket.write(msg.encode("utf-8"))
def receive_message(self):
data = self.socket.readAll()
msg = data.data().decode("utf-8")
self.plainTextEdit.appendPlainText(msg)
def on_connected(self):
self.lineEdit.setEnabled(True)
def on_disconnected(self):
self.lineEdit.setEnabled(False)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
for x in connections:
它不会做任何事情,因为
connections
是空的,如果你想有回声那么你必须添加
connections.append(conn)
之后
conn, addr = s.accept()
关于python-3.x - WinError 10022 : An invalid argument was supplied, 我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62335330/
第一次使用 Mercurial,WindowsXP 上出现问题(可能会在所有 Win 安装上发生)。我在一个不明显的地方找到了答案,所以我自己提出/回答这个问题,这样其他人就不必像我一样搜索。 第一次
我有一个用于打印机碳粉库存的 WinForm 桌面应用程序。数据库位于远程 SQL Server 上,仅由两个订单和交货表组成,库存数量仅通过跟踪订单和交货时间计算得出。加上一堆包含制造商、型号、类别
我知道在 SO 上有成千上万个像这样的问题,但我已经看到了所有问题,但我仍然无法解决我的问题。 我正在使用 ansible 做所有事情,所以它非常自动化,但无论如何,这是我的文件: pg_hba.co
数据库.yml: # SQLite version 3.x # gem install sqlite3 # # Ensure the SQLite 3 gem is defined in yo
我正在开发一个 JavaFX 项目,我在其中使用 Task 进行网络调用.不幸的是,我无法找到如何将参数传递给它。我搜索了很多链接,但没有一个提供。来自 java2s 的一个链接声称它们正在通过,但代
我正在尝试从我的 .py 文件创建一个可执行文件。 我这样做了: import cx_Freeze executables = [cx_Freeze.Executable("Cobra.py")] c
版本:postgresql 14 和 citus 10.2 当我执行 select rebalance_table_shards('tbl_name'); 在CN节点,postgresql报错:ERR
背景: 我正在做一个代码翻译项目,需要我生成变量名。我生成的名字都不应该是重复的。 我真的很沮丧,因为使用 Python 生成器函数会非常简单和优雅。 我试过的: 我之前这样做的方式是通过递归调用我的
我正在尝试向 Azure 的认知文本分析提供一些简单的、Hello-Worldish 的 JSON 示例;使用此测试数据: { "documents": [ { "lan
我正在尝试向 Azure 的认知文本分析提供一些简单的、Hello-Worldish 的 JSON 示例;使用此测试数据: { "documents": [ { "lan
我正在尝试使用 Office365 邮件服务器发送邮件,但一直遇到此问题/异常,目前看不到任何解决方案。对此进行了大量研究,但找不到任何具有类似问题的帖子: System.Net.Mail.SmtpE
假设我有 a graph where the x-axis tick labels are very long strings ,所以我想交替填充刻度(文本和 x 轴之间的垂直距离),以便刻度标签不重
我想根据下面的查询输出一个 5 列表,phpmyadmin 上的输出是正确的,但我收到错误: 为 php 页面上的 foreach() 提供的参数无效。任何帮助将不胜感激。谢谢 代码: get('id
给定一个包含成对的“因素”和一个存在标志的表: create table pairs ( factor_1 text, factor_2 text, exists boolean
因此,我必须在 postgres 中导入数据库,但出现以下错误:“未提供服务器!”我搜索了一下,我明白这是因为 PHP 文件大小限制、帖子大小或内存大小。我在 Linux Ubuntu 上使用 LAM
我已经在 linux (kubuntu) 和最新版本的 pgadmin3 上安装了 postgresql 9.2,但是当我连接它们时出现这个错误: 发生错误:连接到服务器时出错:fe_sendauth
我正在尝试使用下面的 setup.py 代码将我的 Python 程序转换为 Py2exe 库: from distutils.core import setup import py2
我正在尝试使用 boost::asio 库在网络上发送原始 TCP 数据包。我的程序在 Mac OS X 10.8 上运行良好,但是当我在 Windows 7 下运行该程序时,出现异常(在控制台中):
所以我已经从初始布局更改了它,但这是我的导航栏当前的样子: Nav Bar 这是我搞砸的代码: {% include 'site-nav' %}
抱歉,因为我的标题与 StackOverFlow 上的许多其他标题相似,但这些解决方案均未解决我的问题。 我正在使用 Relative Layout 设计布局。在代码 View 中设计后,当我更改为图
我是一名优秀的程序员,十分优秀!