Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import errno
- import socket
- import time
- class TCPClient(object):
- def __init__(self, sock, addr):
- self.addr = addr
- self.socket = sock
- def recv(self, buffsize):
- try:
- data = self.socket.recv(buffsize)
- if not data:
- return -1
- return data
- except socket.error as err:
- if err.errno != errno.EWOULDBLOCK:
- raise
- class TCPSocket(object):
- def __init__(self):
- self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.socket.setblocking(False)
- self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
- def accept(self):
- try:
- client = self.socket.accept()
- return TCPClient(client[0], client[1])
- except socket.error as err:
- if err.errno != errno.EWOULDBLOCK:
- raise
- class Server(object):
- def __init__(self):
- self.connections = []
- self.tcp = TCPSocket()
- def send_all(self, data, ignore=None):
- for conn in self.connections:
- if conn is ignore:
- continue
- else:
- conn.socket.send(data)
- def listen(self, ip, port):
- self.tcp.socket.bind((ip,port))
- self.tcp.socket.listen(5)
- while True:
- conn = self.tcp.accept()
- if conn:
- self.connections.append(conn)
- dropped = []
- for conn in self.connections:
- data = conn.recv(10240)
- if data == -1:
- dropped.append(conn)
- else:
- if data == "<policy-file-request/>\0":
- conn.socket.send('<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="*" secure="false" /></cross-domain-policy>\0')
- elif data:
- if data == "hello\0":
- conn.socket.send("selfconn|{}\0".format(conn.addr))
- self.send_all("conn|{}\0".format(conn.addr), conn)
- elif data == "getusers\0":
- result = ""
- for monkey in self.connections:
- if monkey is conn:
- continue
- else:
- result += "{}|".format(monkey.addr)
- conn.socket.send("users|{}\0".format(result[:-1]))
- elif data[0:2] == "go":
- self.send_all("move|{}|{}\0".format(data[3:-1], conn.addr))
- elif data[0:4] == "stop":
- temp = data[5:-1].split("_")
- self.send_all("stop|{}|{}|{}\0".format(temp[0], temp[1], conn.addr))
- for conn in dropped:
- self.connections.remove(conn)
- server = Server()
- server.listen("192.168.1.100", 843)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement