def client_proc(host, port, task=None): sock = pycos.AsyncSocket(socket.socket(socket.AF_INET, socket.SOCK_DGRAM)) msg = 'client socket: %s' % (sock.fileno()) if sys.version_info.major >= 3: msg = bytes(msg, 'ascii') yield sock.sendto(msg, (host, port)) sock.close()
def client_recv(conn, task=None): conn = pycos.AsyncSocket(conn) while True: line = yield conn.recv_msg() if not line: break print(line.decode())
def client(host, port, n, task=None): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = pycos.AsyncSocket(sock) yield sock.connect((host, port)) print('%s connected' % n) # send arbitrary length of data msg = '%d: ' % n + '-' * random.randint(100, 300) + '/' msg = msg.encode() yield sock.sendall(msg) sock.close()
def server(host, port, task=None): task.set_daemon() sock = pycos.AsyncSocket(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((host, port)) sock.listen(5000) while True: conn, addr = yield sock.accept() pycos.Task(process, conn)
def server(host, port, task=None): task.set_daemon() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # setup socket for asynchronous I/O with pycos sock = pycos.AsyncSocket(sock) sock.bind((host, port)) sock.listen(128) while True: conn, addr = yield sock.accept() # create a task to process connection pycos.Task(process, conn)
def client_proc(conn, addr, server, task=None): # given conn is synchronous, convert it to asynchronous conn = pycos.AsyncSocket(conn) server.send(('joined'.encode(), (conn, addr))) while True: try: line = yield conn.recv_msg() except: line = None if not line: server.send(('left'.encode(), (conn, addr))) break server.send(('broadcast'.encode(), (conn, line)))
def server_proc(host, port, task=None): task.set_daemon() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # convert sock to asynchronous sock = pycos.AsyncSocket(sock) sock.bind((host, port)) sock.listen(128) print('server at %s' % str(sock.getsockname())) try: while True: conn, addr = yield sock.accept() pycos.Task(client_conn_proc, conn) except: msg_bcast_task.terminate()
def client_proc(host, port, input, task=None): # client reads input file and sends data in chunks sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = pycos.AsyncSocket(sock) yield sock.connect((host, port)) # data can be written to this asynchronous socket; however, for # illustration, convert its file descriptor to asynchronous file # and write to that instead afd = pycos.asyncfile.AsyncFile(sock) input = open(input) csum = hashlib.sha1() while True: data = os.read(input.fileno(), 16 * 1024) if not data: break csum.update(data) n = yield afd.write(data, full=True) afd.close() print('client sha1 csum: %s' % csum.hexdigest())
def chat(host, port, task=None): task.set_daemon() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock = pycos.AsyncSocket(sock) sock.bind((host, port)) sock.listen(128) print('server at %s' % str(sock.getsockname())) clients = set() try: while True: conn, addr = yield sock.accept() clients.add(conn) pycos.Task(client_send, clients, conn) except: for client in clients: client.close() raise
def hcwst(host, port, repeater_ws, proxy_host, proxy_port, proxy_username, proxy_password, ssl_verify, task=None): task.set_daemon() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) sock = pycos.AsyncSocket(sock) sock.bind((host, int(port))) sock.listen(1) print('Tunnel listening at %s' % str(sock.getsockname())) if ssl_verify: ws = websocket.WebSocket() else: ws = websocket.WebSocket(sslopt={"cert_reqs": ssl.CERT_NONE}) if not proxy_host: ws.connect(repeater_ws, subprotocols=["binary"], sockopt=(socket.IPPROTO_TCP, socket.TCP_NODELAY)) else: ws.connect(repeater_ws, http_proxy_host=proxy_host, http_proxy_port=proxy_port, http_proxy_auth=proxy_auth, subprotocols=["binary"], sockopt=(socket.IPPROTO_TCP, socket.TCP_NODELAY)) print('Tunnel connected to %s' % repeater_ws) conn, _ = yield sock.accept() pycos.Task(client_send, conn, ws) pycos.Task(ws_send, conn, ws)
msg = yield task.recv() yield conn.send_msg(msg) if __name__ == '__main__': # pycos.logger.setLevel(pycos.logger.DEBUG) # optional arg 1 is host IP address and arg 2 is port to use host, port = '', 3456 if len(sys.argv) > 1: host = sys.argv[1] if len(sys.argv) > 2: port = int(sys.argv[2]) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock = pycos.AsyncSocket(sock) # same connection is used to receive messages in one task and to send # messages in another task pycos.Task(client_recv, sock) sender = pycos.Task(client_send, sock) if sys.version_info.major > 2: read_input = input else: read_input = raw_input while True: try: line = read_input().strip() if line.lower() in ('quit', 'exit'): break if not line:
import sys, socket import pycos def server_proc(n, sock, task=None): for i in range(n): msg, addr = yield sock.recvfrom(1024) print('Received "%s" from %s:%s' % (msg, addr[0], addr[1])) sock.close() def client_proc(host, port, task=None): sock = pycos.AsyncSocket(socket.socket(socket.AF_INET, socket.SOCK_DGRAM)) msg = 'client socket: %s' % (sock.fileno()) if sys.version_info.major >= 3: msg = bytes(msg, 'ascii') yield sock.sendto(msg, (host, port)) sock.close() if __name__ == '__main__': sock = pycos.AsyncSocket(socket.socket(socket.AF_INET, socket.SOCK_DGRAM)) sock.bind(('127.0.0.1', 0)) host, port = sock.getsockname() n = 50 server_task = pycos.Task(server_proc, n, sock) for i in range(n): pycos.Task(client_proc, host, port) server_task.value()
if __name__ == '__main__': # pycos.logger.setLevel(pycos.logger.DEBUG) # optional arg 1 is host IP address and arg 2 is port to use host, port = '', 3456 if len(sys.argv) > 1: host = sys.argv[1] if len(sys.argv) > 2: port = int(sys.argv[2]) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) pycos.Task(client_recv, sock) # wrap it with pycos's synchronous (with 'blocking=True') socket so # 'send_msg' can be used conn = pycos.AsyncSocket(sock, blocking=True) if sys.version_info.major > 2: read_input = input else: read_input = raw_input while True: try: line = read_input().strip() if line.lower() in ('quit', 'exit'): break if not line: continue except: break conn.send_msg(line.encode())