예제 #1
0
파일: udp.py 프로젝트: pgiri/pycos
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()
예제 #2
0
def client_recv(conn, task=None):
    conn = pycos.AsyncSocket(conn)
    while True:
        line = yield conn.recv_msg()
        if not line:
            break
        print(line.decode())
예제 #3
0
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()
예제 #4
0
파일: webserver.py 프로젝트: pgiri/pycos
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)
예제 #5
0
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)
예제 #6
0
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)))
예제 #7
0
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()
예제 #8
0
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())
예제 #9
0
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
예제 #10
0
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)
예제 #11
0
        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:
예제 #12
0
파일: udp.py 프로젝트: pgiri/pycos
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()
예제 #13
0
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())