Python TCP Server接受连接和广播命令

Python TCP Server接受连接和广播命令,第1张

Python TCP Server接受连接和广播命令

终于成功了!非常感谢@Arman为我指出正确的穿线方向。我终于感觉到我知道一切正常!

这是我完整的服务器和客户端代码。希望这可以通过master> client
setup帮助其他人。_broadcast()函数正在工作,因为您会看到它现在只广播静态msg,但这应该是一个简单的更新。

如果有人对代码清除有任何建议,请使用该代码作为示例的python最佳实践,我希望听到并了解更多。再次感谢SE!

##Clientimport socketimport sysimport json#varsconnected = False#connect to serverclient_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect(('10.0.0.158',8888))connected = Truewhile connected == True:    #wait for server commands to do things, now we will just display things    data = client_socket.recv(1024)         cmd = json.loads(data) #we now only expect json        if(cmd['type'] == 'bet'):        bet = cmd['value']        print('betting is: '+bet)    elif (cmd['type'] == 'result'):     print('winner is: '+str(cmd['winner']))        print('payout is: '+str(cmd['payout']))##Serverimport socket, time, sysimport threadingimport pprintTCP_IP = ''TCP_PORT = 8888BUFFER_SIZE = 1024clientCount = 0class server():    def __init__(self):        self.CLIENTS = []    def startServer(self):        try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((TCP_IP,TCP_PORT)) s.listen(10) while 1:     client_socket, addr = s.accept()     print ('Connected with ' + addr[0] + ':' + str(addr[1]))     global clientCount     clientCount = clientCount+1     print (clientCount)     # register client     self.CLIENTS.append(client_socket)     threading.Thread(target=self.playerHandler, args=(client_socket,)).start() s.close()        except socket.error as msg: print ('Could Not Start Server Thread. Error Code : ') #+ str(msg[0]) + ' Message ' + msg[1] sys.exit()   #client handler :one of these loops is running for each thread/player       def playerHandler(self, client_socket):        #send welcome msg to new client        client_socket.send(bytes('{"type": "bet","value": "1"}', 'UTF-8'))        while 1: data = client_socket.recv(BUFFER_SIZE) if not data:      break #print ('data: ' + repr(data) + "n") #data = data.depre("UTF-8") # broadcast for client in self.CLIENTS.values():     client.send(data)         # the connection is closed: unregister        self.CLIENTS.remove(client_socket)        #client_socket.close() #do we close the socket when the program ends? or for ea client thead?    def broadcast(self, message):        for c in self.CLIENTS: c.send(message.enpre("utf-8"))    def _broadcast(self):     for sock in self.CLIENTS: try :     self._send(sock) except socket.error:          sock.close()  # closing the socket connection     self.CLIENTS.remove(sock)  # removing the socket from the active connections list    def _send(self, sock):     # Packs the message with 4 leading bytes representing the message length        #msg = struct.pack('>I', len(msg)) + msg        # Sends the packed message        sock.send(bytes('{"type": "bet","value": "1"}', 'UTF-8'))if __name__ == '__main__':    s = server() #create new server listening for connections    threading.Thread(target=s.startServer).start()    while 1:    s._broadcast()        pprint.pprint(s.CLIENTS)        print(len(s.CLIENTS)) #print out the number of connected clients every 5s        time.sleep(5)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5462381.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存