Skip to content

Instantly share code, notes, and snippets.

@oglops
Created September 9, 2016 06:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oglops/8cace43bd8f2e3ae2d687be02ce55f4e to your computer and use it in GitHub Desktop.
Save oglops/8cace43bd8f2e3ae2d687be02ce55f4e to your computer and use it in GitHub Desktop.
simplest socket server and client - before making socket server threaded and supporting multiple client
import os
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import uic
import socket
class MyWindow(QDialog):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
layout = QVBoxLayout(self)
button = QPushButton('connect')
for i in range(5):
cmd_button = QPushButton('cmd - %s' % i)
layout.addWidget(cmd_button)
cmd_button.clicked.connect(lambda _, i=i: self.send_cmd(i))
layout.addWidget(button)
self.setLayout(layout)
self.resize(200, 40)
button.clicked.connect(self.connect_server)
def connect_server(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect(('localhost', 5000))
def send_cmd(self, i):
cmd = 'cmd - %s<>' % i
print 'sending : %s' % cmd
self.socket.send(cmd)
def main():
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
# enable ctrl-c to kill the app
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
import socket
import threading
class SocketServer(object):
def __init__(self, port=0):
self.host = 'localhost'
self.port = port
self.bufsize = 4096
self.backlog = 5
self.separator = '<>'
def listen(self):
while True:
client, address = self.socket.accept()
# client.settimeout(60)
threading.Thread(
target=self.server, args=(client, address)).start()
def start(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind((self.host, self.port))
self.socket.listen(self.backlog)
threading.Thread(target=self.listen).start()
def server(self, client, address):
data = client.recv(self.bufsize)
while True:
if self.separator in data:
data_split = data.split(self.separator)
cmds = data_split[:-1]
# execute cmds in threads
self.process_cmds(cmds)
data = data_split[-1]
data += client.recv(self.bufsize)
def process_cmds(self, cmds):
for cmd in cmds:
print 'executing: %s' % cmd
import os
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import uic
# enable ctrl-c to kill the app
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
import mysocket
class MyWindow(QDialog):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
layout = QVBoxLayout(self)
button = QPushButton('start')
layout.addWidget(button)
self.setLayout(layout)
self.resize(200, 40)
button.clicked.connect(self.start_server)
def start_server(self):
self.socket = mysocket.SocketServer(port=5000)
self.socket.start()
def main():
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment