I'm currently facing challenges in establishing a connection between two computers on the same network using Python and PyQt's socket classes. While I've successfully implemented a server-client setup with Python's built-in socket library, my attempt to do the same with PyQt's socket classes is failing.
server.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QLineEdit
from PyQt5.QtNetwork import QTcpServer, QHostAddress
IP = '192.168.6.66'
class Server(QMainWindow):
def __init__(self):
super().__init__()
self.resize(500, 300)
self.server = QTcpServer(self)
self.server.listen(QHostAddress(IP), 12345)
self.server.newConnection.connect(self.handle_client_connection)
self.text_edit = QTextEdit(self)
self.text_edit.setReadOnly(True)
self.text_edit.setGeometry(10, 10, 400, 200)
self.message_input = QLineEdit(self)
self.message_input.setGeometry(10, 220, 200, 30)
self.send_button = QPushButton("Send Message", self)
self.send_button.setGeometry(220, 220, 200, 30)
self.send_button.clicked.connect(self.send_message)
self.start_server()
self.setWindowTitle("Server")
def send_message(self):
message = self.message_input.text()
self.message_input.clear()
self.client_socket.write(message.encode("utf-8"))
def start_server(self):
self.text_edit.clear()
self.text_edit.append("Server started.")
def handle_client_connection(self):
self.client_socket = self.server.nextPendingConnection()
self.client_socket.readyRead.connect(self.receive_message)
def receive_message(self):
client_socket = self.sender()
data = client_socket.readAll().data().decode("utf-8")
self.text_edit.append(f"Received message: {data}")
if __name__ == "__main__":
app = QApplication(sys.argv)
server = Server()
server.show()
sys.exit(app.exec_())
client.py:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QLineEdit
from PyQt5.QtNetwork import QTcpSocket, QHostAddress
IP = '192.168.6.66'
class Client(QMainWindow):
def __init__(self):
super().__init__()
self.resize(500, 300)
self.client_socket = QTcpSocket(self)
self.client_socket.readyRead.connect(self.receive_message)
self.client_socket.connectToHost(QHostAddress(IP), 12345)
self.text_edit = QTextEdit(self)
self.text_edit.setReadOnly(True)
self.text_edit.setGeometry(10, 10, 400, 200)
self.message_input = QLineEdit(self)
self.message_input.setGeometry(10, 220, 200, 30)
self.send_button = QPushButton("Send Message", self)
self.send_button.setGeometry(220, 220, 200, 30)
self.send_button.clicked.connect(self.send_message)
self.setWindowTitle("Client")
def send_message(self):
message = self.message_input.text()
self.message_input.clear()
self.client_socket.write(message.encode("utf-8"))
def receive_message(self):
data = self.client_socket.readAll().data().decode("utf-8")
self.text_edit.append(f"Received message: {data}")
if __name__ == "__main__":
app = QApplication(sys.argv)
client = Client()
client.show()
sys.exit(app.exec_())