Saltar al contenido

aplicación de chat en tiempo real en ejemplo de código Python

Después de de una prolongada selección de información hemos podido solucionar esta cuestión que pueden tener ciertos los usuarios. Te regalamos la respuesta y nuestro deseo es serte de gran apoyo.

Ejemplo: cómo hacer un cuadro de chat usando Python

#Server Scriptimport socket 
import select 
import sys 
from thread import*"""The first argument AF_INET is the address domain of the 
socket. This is used when we have an Internet Domain with 
any two hosts The second argument is the type of socket. 
SOCK_STREAM means that data or characters are read in 
a continuous flow."""
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)# checks whether sufficient arguments have been provided iflen(sys.argv)!=3:print("Correct usage: script, IP address, port number")
	exit()# takes the first argument from command prompt as IP address 
IP_address =str(sys.argv[1])# takes second argument from command prompt as port number 
Port =int(sys.argv[2])""" 
binds the server to an entered IP address and at the 
specified port number. 
The client must be aware of these parameters 
"""
server.bind((IP_address, Port))""" 
listens for 100 active connections. This number can be 
increased as per convenience. 
"""
server.listen(100) 

list_of_clients =[]defclientthread(conn, addr):# sends a message to the client whose user object is conn 
	conn.send("Welcome to this chatroom!")whileTrue:try: 
				message = conn.recv(2048)if message:"""prints the message and address of the 
					user who just sent the message on the server 
					terminal"""print("<"+ addr[0]+"> "+ message )# Calls broadcast function to send message to all 
					message_to_send ="<"+ addr[0]+"> "+ message 
					broadcast(message_to_send, conn)else:"""message may have no content if the connection 
					is broken, in this case we remove the connection"""
					remove(conn)except:continue"""Using the below function, we broadcast the message to all 
clients who's object is not the same as the one sending 
the message """defbroadcast(message, connection):for clients in list_of_clients:if clients!=connection:try: 
				clients.send(message)except: 
				clients.close()# if the link is broken, we remove the client 
				remove(clients)"""The following function simply removes the object 
from the list that was created at the beginning of 
the program"""defremove(connection):if connection in list_of_clients: 
		list_of_clients.remove(connection)whileTrue:"""Accepts a connection request and stores two parameters, 
	conn which is a socket object for that user, and addr 
	which contains the IP address of the client that just 
	connected"""
	conn, addr = server.accept()"""Maintains a list of clients for ease of broadcasting 
	a message to all available people in the chatroom"""
	list_of_clients.append(conn)# prints the address of the user that just connected print(addr[0]+" connected")# creates and individual thread for every user # that connects 
	start_new_thread(clientthread,(conn,addr))	 

conn.close() 
server.close()#Client Script# Python program to implement client side of chat room. import socket 
import select 
import sys 

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)iflen(sys.argv)!=3:print("Correct usage: script, IP address, port number")
	exit() 
IP_address =str(sys.argv[1]) 
Port =int(sys.argv[2]) 
server.connect((IP_address, Port))whileTrue:# maintains a list of possible input streams 
	sockets_list =[sys.stdin, server]""" There are two possible input situations. Either the 
	user wants to give manual input to send to other people, 
	or the server is sending a message to be printed on the 
	screen. Select returns from sockets_list, the stream that 
	is reader for input. So for example, if the server wants 
	to send a message, then the if condition will hold true 
	below.If the user wants to send a message, the else 
	condition will evaluate as true"""
	read_sockets,write_socket, error_socket = select.select(sockets_list,[],[])for socks in read_sockets:if socks == server: 
			message = socks.recv(2048)print(message)else: 
			message = sys.stdin.readline() 
			server.send(message) 
			sys.stdout.write("") 
			sys.stdout.write(message) 
			sys.stdout.flush() 
server.close()# Server (host) should have the top server script and the clients should have the client script. Both are labelled with a comment

Reseñas y puntuaciones del artículo

Acuérdate de que te brindamos la opción de valorar esta crónica si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *