[PyQt] Having a problem with QTcpSocket

Hans-Peter Jansen hpj at urpla.net
Mon Nov 23 14:13:29 GMT 2009


On Monday 23 November 2009, 13:27:52 Nick Gaens wrote:
>  Nick Gaens schreef:
>  Phil Thompson schreef:
> On Sat, 21 Nov 2009 17:19:00 +0100, Nick Gaens <nickgaens at gmail.com>
> wrote:
>
> Hello all,
>
> I'm trying to get two clients to speak to each other, using an instance
>
> of
>
> QtNetwork.QTcpSocket for each client.
> The clients are on different computers with IP's: 192.168.1.100 and .102
>
> On the first client, I run the code below:
>
> ------------------
> def __init__(self):
>     self.socket = QtNetwork.QTcpSocket(self)
>     self.socket.setLocalAddress(QtNetwork.QHostAddress("192.168.1.100"))
>     self.socket.setLocalPort(55555)
>     self.socket.readyRead.connect(self.receiveData)
>
> def connectToOtherClient(self, ip):
>     self.socket.connectToHost(QtNetwork.QHostAddress(ip), 55555)
>     if self.socket.waitForConnected(10000):
>         print "Connected!"
>     else:
>         print self.socket.state() # Prints '0' (zero), meaning
>         UnconnectedState
>
> ------------------
>
> So I create a QTcpSocket, I tell it the IP I want to use and after having
> the user asking for the remote IP address, connectToOtherClient() is
> invoked.
>
> On the second client, I just create an instance of this class, using
> "192.168.1.102" as IP there in __init__(). No invocation of
> connectToOtherClient() there, ofcourse..
>
> The problem is: it doesn't connect at all.. The socket state remains
> "UnconnectedState"..
>
> What am I doing wrong here?
>
>
> Clients talk to servers, not other clients. Have a look at QTcpServer.
>
> Phil
>
>  I've now instantiated a QTcpServer, which "creates" a socket for an
> incoming connection (QTcpServer.nextPendingConnection(), that is). Both
> clients have such a server instance, since they both should be able to
> connect to each other. But still, the QTcpSocket.connectToHost()
> invocation doesn't do a thing. I'm starting to think this is some bug /
> error in PyQt4 itself instead of in my code. The C++-Qt4 Fortune Server +
> Client example runs flawlessly between the two machines, so there are no
> network blocks or something like that. Also, the C++-code has the same
> logical flow as my code below.
>
>  ----------------------------
>  def __init__(self):
>          self.server = QtNetwork.QTcpServer(self)
>          self.server.serverPort = 55555
>          self.server.newConnection.connect(self.clientConnecting)
>          self.server.listen() # defaults to QHostAddress.Any
>
>  def clientConnecting(self): # used by the "server"
>          if self.server.hasPendingConnections():
>              connectingClient = self.server.nextPendingConnection()
>              connectingClient.readyRead.connect(self.receiveData)
>
>  def connectToClient(self, ip):  # used by the "client"
>          socket = QtNetwork.QTcpSocket()
>          socket.readyRead.connect(self.receiveData)
>          socket.connectToHost(QtNetwork.QHostAddress(ip), 55555) # ip of
> server if socket.waitForConnected(5000):
>              print "Connected!"
>  ----------------------------
>
>  I *really* do not understand why this is *not* working..
>
>  Nick
>
>  Anyone? :-( I've tried various things, but none of them helped.. I've
> found out that both NIC's actually send / receive some bytes (proven by
> the suddenly increasing number of sent / received bytes on both
> computers), but it doesn't actually connect them..

The usual "please provide a minimum self containing example" applies.

Pete



More information about the PyQt mailing list