终于成功了!非常感谢@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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)