【发布时间】:2016-10-12 09:00:12
【问题描述】:
我一直试图在我的局域网上创建一个 TCP python 服务器,但我经常遇到这个项目的问题。我的问题是:是否可以从 1 个服务器向多个客户端发送消息(通过 TCP)? (即客户端 1 发送消息“Hello world”,并在所有其他客户端 [clients-2,clients-3] 上显示该消息)。到目前为止,这是我的服务器代码:
import socket, time, sys
import threading
TCP_IP = input("Host IP: ")
TCP_PORT = int(input("Host Port: "))
BUFFER_SIZE = 1024
def createNewThread(function):
threading.Thread(target=function).start()
def Listening():
try:
while True:
s.listen(1)
conn,addr = s.accept()
threading.Thread(target=Listening).start()
print("User joined with IP %s" % (addr[0]))
while 1:
data = conn.recv(BUFFER_SIZE)
if not data: break
conn.send(addr[0].encode("utf-8") + b': ' + data)
conn.close()
except ConnectionResetError as e:
print("Connection was closed: ", e)
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP,TCP_PORT))
print("-----Server started-----")
Listening()
except socket.error as e:
print("Socket error occured. More info: ", e)
这是我的客户代码:
import socket, sys, time
TCP_IP = input("Connect to Local IP: ")
TCP_PORT = int(input("Connect to Local Port: "))
BUFFER_SIZE = 1024
running = True
while running == True:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Connecting...")
s.connect((TCP_IP,TCP_PORT))
print("Connected!")
while True:
MESSAGE = input("Message: ")
if MESSAGE == "exit":
s.close()
raise SystemExit
s.send(MESSAGE.encode('ascii'))
data = s.recv(BUFFER_SIZE)
print(data.decode("utf-8"))
running = False
time.sleep(20)
except:
print(sys.exc_info()[0])
time.sleep(1)
提前感谢任何答案!
编辑: 我希望输出看起来像这样:
User3's IP: Message they sent
User1's IP: Message they sent
Message: What do you want to send?
【问题讨论】:
-
" 是否可以从一台服务器向多个客户端发送消息(通过 TCP)? - 是的。您面临的问题是什么?
-
@Prabhu sigh 然后呢?