Created
November 5, 2014 12:39
-
-
Save muatik/9ac6f7a1ae35e0e40a0d to your computer and use it in GitHub Desktop.
a very first example of sockets in python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import socket | |
| import select | |
| class Server(object): | |
| def __init__(self): | |
| self.port = 8002 | |
| self.socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) | |
| self.socket.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 ) | |
| self.socket.bind(('', self.port)) | |
| self.socket.listen(5) | |
| self.descriptors = [self.socket] | |
| print 'ChatServer started on port {}'.format(self.port) | |
| def run(self): | |
| while 1: | |
| (sread, swrite, sexc) = select.select(self.descriptors, [], [] ) | |
| for socket in sread: | |
| if socket == self.socket: | |
| self.accept() | |
| else: | |
| inputdata = socket.recv(4096) | |
| if inputdata == '': | |
| self.descriptors.remove(socket) | |
| print 'client disconneted {}'.format(socket.getpeername()) | |
| else: | |
| print 'new message {} {}'.format(inputdata, socket.getpeername()) | |
| self.broadcast('new message {} {}'.format(inputdata, socket.getpeername()), '') | |
| def accept(self): | |
| conn, (remhost, remport) = self.socket.accept() | |
| self.descriptors.append(conn) | |
| conn.send("You're connected to the Python chatserver\r\n") | |
| str = 'Client joined %s:%s\r\n' % (remhost, remport) | |
| self.broadcast(str, conn) | |
| def broadcast(self, message, omit_socket): | |
| for socket in self.descriptors: | |
| if socket != self.socket and omit_socket != socket: | |
| socket.send(message) | |
| server = Server() | |
| server.run() |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You can read the whole story at this page: http://www.ibm.com/developerworks/linux/tutorials/l-pysocks/