Advertisement
pblnrao

TCP Messaging

Dec 27th, 2012
1,409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.61 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Dec 27 15:36:40 2012
  4.  
  5. @author: narasimhapbl.1863
  6. """
  7.  
  8. import sys
  9. import os
  10. from PyQt4 import QtGui
  11. from PyQt4 import QtCore
  12. from PyQt4 import QtNetwork
  13.  
  14. PORT = 9999
  15. SIZEOF_UINT32 = 4
  16.  
  17. class Server(QtCore.QObject):
  18.  
  19.     def __init__(self,HOST):
  20.        
  21.         super(Server, self).__init__()
  22.        
  23.         self.tcpServer = QtNetwork.QTcpServer()              
  24.         self.tcpServer.listen(QtNetwork.QHostAddress(HOST), PORT)
  25.         self.tcpServer.newConnection.connect(self.addConnection)
  26.                
  27.     def addConnection(self):
  28.  
  29.         try:
  30.            
  31.             self.clientConnection = self.tcpServer.nextPendingConnection()
  32.             self.clientConnection.nextBlockSize = 0
  33.                    
  34.             self.clientConnection.readyRead.connect(self.receiveMessage)
  35.             self.clientConnection.disconnected.connect(self.removeConnection)
  36.             self.clientConnection.error.connect(self.socketError)
  37.            
  38.         except Exception as ex:
  39.            
  40.             QtGui.QMessageBox.information(None,"Error", ex.message)
  41.                        
  42.     def receiveMessage(self):
  43.  
  44.         if self.clientConnection.bytesAvailable() > 0:
  45.             stream = QtCore.QDataStream(self.clientConnection)
  46.             stream.setVersion(QtCore.QDataStream.Qt_4_2)
  47.  
  48.             if self.clientConnection.nextBlockSize == 0:
  49.                
  50.                 if self.clientConnection.bytesAvailable() < SIZEOF_UINT32:                    
  51.                     return
  52.                    
  53.                 self.clientConnection.nextBlockSize = stream.readUInt32()
  54.                
  55.             if self.clientConnection.bytesAvailable() < self.clientConnection.nextBlockSize:
  56.                 return
  57.  
  58.             self.Message = stream.readQString()
  59.             self.clientConnection.nextBlockSize = 0
  60.             self.emit(QtCore.SIGNAL('DataReceived'))
  61.             self.clientConnection.nextBlockSize = 0
  62.  
  63.     def removeConnection(self):
  64.         pass
  65.  
  66.     def socketError(self):
  67.         pass
  68.  
  69. class Client(QtGui.QDialog):
  70.  
  71.     def __init__(self, parent=None):
  72.        
  73.         super(Client, self).__init__(parent)
  74.  
  75.         # Ititialize socket
  76.         self.Clientsocket = QtNetwork.QTcpSocket()
  77.  
  78.         # Initialize data IO variables
  79.         self.nextBlockSize = 0
  80.         self.request = None
  81.  
  82.         self.Clientsocket.disconnected.connect(self.serverHasStopped)
  83.         self.connect(self.Clientsocket,
  84.                      QtCore.SIGNAL("error(QAbstractSocket::SocketError)"),
  85.                      self.serverHasError)
  86.        
  87.         self.browser = QtGui.QTextBrowser()
  88.         self.lineedit = QtGui.QLineEdit("Message to send")
  89.         self.lineedit.selectAll()
  90.         self.targetSystem = QtGui.QLineEdit("Enter target system")
  91.         self.layout = QtGui.QVBoxLayout(self)#.win)
  92.         self.layout.addWidget(self.browser)
  93.         self.layout.addWidget(self.lineedit)
  94.         self.layout.addWidget(self.targetSystem)
  95.  
  96.         self.lineedit.setFocus()
  97.  
  98.         self.lineedit.returnPressed.connect(self.SendData)
  99.         self.setWindowTitle("Client")
  100.        
  101.     def SendData(self):
  102.        
  103.         TargetSystems = self.targetSystem.text().split(',')
  104.         Msg2Send = self.lineedit.text()
  105.        
  106.         for TargetSystem in TargetSystems:
  107.        
  108.             self.Clientsocket.connectToHost(TargetSystem, PORT)
  109.             self.Clientsocket.waitForConnected(-1)
  110.             self.request = QtCore.QByteArray()
  111.             stream = QtCore.QDataStream(self.request, QtCore.QIODevice.WriteOnly)
  112.             stream.setVersion(QtCore.QDataStream.Qt_4_2)
  113.             stream.writeUInt32(0)
  114.             stream.writeQString(Msg2Send)
  115.             stream.device().seek(0)
  116.             stream.writeUInt32(self.request.size() - SIZEOF_UINT32)
  117.             self.Clientsocket.write(self.request)
  118.             self.nextBlockSize = 0
  119.             self.request = None
  120. #            self.Clientsocket.close()
  121.         self.Clientsocket.disconnectFromHost()
  122.  
  123.  
  124.     def serverHasStopped(self):
  125.        
  126.         self.Clientsocket.close()
  127.  
  128.     def serverHasError(self):
  129.         self.ServerError = self.Clientsocket.errorString()
  130.         self.emit(QtCore.SIGNAL('SocketError'))
  131.         self.Clientsocket.close()
  132.  
  133. def ShowMessage():
  134.    
  135.     QtGui.QMessageBox.information(None,"Message", server.Message)
  136.    
  137. app = QtGui.QApplication(sys.argv)
  138. print os.getenv('computername')
  139. server = Server(os.getenv('computername'))
  140. client = Client()
  141.  
  142. QtCore.QObject.connect(server,QtCore.SIGNAL("DataReceived"), ShowMessage)
  143.  
  144. client.show()
  145. app.exec_()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement