コード例 #1
0
ファイル: rps_user.py プロジェクト: Arctem/nmt_python_labs
 def play_again(self, msg):
     if len(msg) < 1 or msg[0] not in 'yn':
         self.send('again')
     elif msg == 'y':
         self.find_game()
     else:
         self.socket.close()
         mom.remove_client(self.socket)
コード例 #2
0
ファイル: rps.py プロジェクト: NMTPythonistas/nmt_python_labs
def main():
    host = ""
    port = 50001
    backlog = 5
    size = 1024
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind((host, port))
    server.listen(backlog)
    mom.inputs.append(server)
    mom.inputs.append(sys.stdin)
    running = True
    while running:
        input_ready, output_ready, except_ready = select.select(mom.inputs, [], [])

        for s in input_ready:
            if s == server:
                client, address = server.accept()
                print("Received connection from {}.".format(address))
                mom.add_client(client)

            elif s == sys.stdin:
                # handle standard input
                junk = sys.stdin.readline().strip()
                if junk == "quit":
                    print("Closing server.")
                    running = False
                if junk == "users":
                    print("Users: {}".format(mom.get_names()))
            else:
                # handle other sockets
                try:
                    data = s.recv(size)
                except (ConnectionResetError, TimeoutError) as e:
                    # count as closed if other connection terminated early
                    data = None
                # print(data)
                if not mom.users[s].recv(data):
                    # this socket closed
                    print("Connection {} closed remotely.".format(mom.users[s].name))
                    s.close()
                    mom.remove_client(s)

    server.close()