P2P Python套接字编程

P2P Python套接字编程,python,linux,sockets,Python,Linux,Sockets,因此,我应该在python中的两个客户机之间创建一个基本的未加密IM服务(标题为unencrypt.py),并使用select()函数在一个文件中创建客户机/服务器连接。此外,一旦发送消息,接收到的消息应立即写入标准输出。我需要使用以下命令来实现该功能:unencryptedm-s |-c hostname 我相信我的功能就快实现了,我就是无法发送和接收信息。代码如下: import socket, select, time, sys, queue sock = socket.socket(

因此,我应该在python中的两个客户机之间创建一个基本的未加密IM服务(标题为unencrypt.py),并使用select()函数在一个文件中创建客户机/服务器连接。此外,一旦发送消息,接收到的消息应立即写入标准输出。我需要使用以下命令来实现该功能:unencryptedm-s |-c hostname

我相信我的功能就快实现了,我就是无法发送和接收信息。代码如下:


import socket, select, time, sys, queue

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_server_opt = sys.argv[1]

if client_server_opt == "-s":
    host = socket.gethostname()
    port = int(sys.argv[2])
    sock.bind((host, port))
    sock.listen(10)
    client_conn = [sock, sys.stdin]
    outputs = []


    print(f"server listening on port {port}")
    while True:
        read, write, err = select.select(client_conn, outputs, client_conn)

        for socket in read:
            if socket == sock:
                client, addr = socket.accept()
                print(f"new connection from {addr}")
                client.setblocking(0)
                client_conn.append(client)
            elif socket == sys.stdin:
                newMessage = bytes(input(), "utf-8")
            else:
                message = sock.recv(4096).decode("utf-8")
                if message:
                    print (f"Received message from client: {message}")
                    if socket not in outputs:
                        outputs.append(socket)
                else:
                    if socket in outputs:
                        outputs.remove(socket)
                        print("output removed")
                    client_conn.remove(socket)
                    print("input removed")
                    socket.close()
        for socket in write:
            socket.send(newMessage)
        for socket in err:
            print("Error with a socket")
            socket.close()
            client_conn.remove(socket)

elif client_server_opt == "-c":

    host = socket.gethostname()
    port = int(sys.argv[3])
    print(f"transmitting to server on port {port}")

    sock.connect((host, port))
    client_conn = [sock, sys.stdin]
    outputs = []
    while True:
        read, write, err = select.select(client_conn, outputs, client_conn)

        for socket in read:
            if socket == sys.stdin:
                newMessage = bytes(input(), "utf-8")
            else:    
                message = sock.recv(4096).decode("utf-8")
                if message:
                    print (f"Received message from client: {message}")
                    if socket not in outputs:
                        outputs.append(socket)
                else:
                    if socket in outputs:
                        outputs.remove(socket)
                        print("output removed")
                    client_conn.remove(socket)
                    print("input removed")
                    socket.close()
        for socket in write:
            socket.send(bytes(input(), "utf-8"))
        for socket in err:
            print("Error with a socket")
            socket.close()
            client_conn.remove(socket)


        # message = sock.recv(4096).decode("utf-8")
        # print(f"Received message from server: {message}")

else:
    print("Unknown command")```
Thank you for any help!!!!