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