使用python和socket进行网络通信

时间:2017-11-21 20:42:02

标签: python sockets

我成功地制作了一个代码,当新的"客户端"时,启动一个服务器,该服务器可以通过我的LAN上的其他设备与CMD命令telnet hostname port连接。输入一个单词并按下输入单词然后通过服务器发回给他们。我的问题是,如果我将2个设备连接到服务器,我将如何将消息从一个发送到服务器然后再发送到另一个。像一个消息传递程序。我使用的代码如下所示

import socket
import sys
from _thread import *

host = ''
port = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    s.bind((host, port))
except socket.error as e:
    print(str(e))

s.listen(5)
print('Waiting for a connection.')

def threaded_client(conn):
    conn.send(str.encode('Welcome, type your info\n'))
    final_char = ""

    while True:
        data = conn.recv(2048)
        char = data.decode("utf-8")
        print(data)
        if data != b'\r\n':
            final_char += char
            print(final_char)
        else:


            reply = 'Server output: '+ final_char+"\n"
            if not data:
                break
            conn.sendall(str.encode(reply))
            final_char = ""
    conn.close()



while True:

    conn, addr = s.accept()
    print(addr)
    print(conn)
    print('connected to: '+addr[0]+':'+str(addr[1]))

    start_new_thread(threaded_client,(conn,))

2 个答案:

答案 0 :(得分:1)

不是实际的实现,而是一些理论:

您需要保留您有活动连接的所有客户的列表:

while ( true )

    client = server.accept()

    clientList.add(client)

    startThread(client)

然后在线程

while ( true )

    data = connection.receive()

    for client in clientList

        client.sendall( data )

答案 1 :(得分:1)

看看ZQM,python库工作得很完美,它已经在内部使用套接字实现了你需要的东西。 https://learning-0mq-with-pyzmq.readthedocs.io/en/latest/

查看他们的发布者/订阅者消息模式。