Sockets

Iniciado por Panic0, 20 Agosto 2020, 03:06 AM

0 Miembros y 1 Visitante están viendo este tema.

Panic0

Chicos soy nuevo en esto de los sockets,logre hacer esto...¿Pero mi pregunta es con que puedo seguir ahora?
Servidor

import socket
mi_socket = socket.socket()
mi_socket.bind(('192.168.1.31',8000 ))
mi_socket.listen(5) 


while True:
   conexion, addr = mi_socket.accept()
   print ("Nueva conexion establecida!")
   print(addr)
   respuesta1 = conexion.recv(1024)
   print(respuesta1)
   mensajeServidor = "Hola, te saludo desde el servidor!"
   conexion.send(mensajeServidor.encode())
   conexion.close() 

Cliente
import socket
mi_socket = socket.socket()
mi_socket.connect (('192.168.1.31', 8000))
MensajeCliente = "Hola, te saludo desde el cliente!"
mi_socket.send(MensajeCliente.encode())
repuesta = mi_socket.recv(1024).decode()
print(repuesta)
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.

Drakaris

#1
A que te refieres con...?
CitarPero mi pregunta es con que puedo seguir ahora?
Puedes hacer lo que quieras. ¿Que quieres hacer? Puedes hacer desde una red de conexiones hasta un backdoor. ¿Que quieres hacer con ello?

Si quieres aprender a hacer conexiones sockets. Unicamente no te limites a seguir tutoriales. Esta bien para aprender los fundamentos. Pero aprenderás más cuando te pongas una meta y hagas un proyecto (no hace falta grande) que conlleve esto.

Te recomiendo que en la funcion bind() el string este vacio, ya que esta escuchando conexiones.
Código (python) [Seleccionar]

mi_socket = socket.socket()
mi_socket.bind(('',8000 ))
mi_socket.listen(5)  


A no ser que quiera que escuche hacia una IP especifica.

Además estas creando un objeto socket.socket(), cuando creas un funcion socket sin parametros, por defecto estas creando un socket con paquetes TCP/IP y IPv4

Código (python) [Seleccionar]
mi_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
El primer parametro especifica el tipo de familia (IPv4, IPv6) y el segundo el tipo de paquete (TCP/UDP). Mira la documentación oficial
Doc: https://docs.python.org/3/library/socket.html?highlight=socket#socket.socket

Además. Estas trabajando en localhost? Si es así en el servidor cambia el:
Código (python) [Seleccionar]
mi_socket.bind(('192.168.1.31',8000 ))
a
Código (python) [Seleccionar]
mi_socket.bind(('',8000 ))

y en el cliente:
Código (python) [Seleccionar]
mi_socket.connect(('192.168.1.31', 8000))
a
Código (python) [Seleccionar]
mi_socket.connect(('127.0.0.1', 8000))
recuerda que 127.0.0.1/localhost es el loopback en IPv4 y en IPv6 es ::1

He probado tu código y va bién. Unicamente es que en el lado del servidor cuando muestras el mensaje, se muestra en b'[texto]'.
Código (python) [Seleccionar]
print(repuesta1) #output: b'Hola, te saludo desde el servidor!'
, reemplaza la linea a:
Código (python) [Seleccionar]
print(repuesta1.decode()) #output: Hola, te saludo desde el servidor!

Ejemplo de conexion socket

Server:
Código (python) [Seleccionar]

#!/usr/bin/python3
import socket, sys
mi_socket = socket.socket()
mi_socket.bind(('',8000 ))
mi_socket.listen(5)  

while True:
 try:
  conexion, addr = mi_socket.accept()
  print ("Nueva conexion establecida!")
  print(addr)
  while True:
     respuesta1 = conexion.recv(1024)
     if respuesta1.decode() == "close":
       print("closing server....")
       mi_socket.close()
       sys.exit()
     else:
       print(respuesta1.decode())
 except KeyboardInterrupt: # presiona Ctrl+C
   print("\nclosing server....")
   break
mi_socket.close()
sys.exit()


client:
Código (python) [Seleccionar]

#!/usr/bin/python3
import socket
mi_socket = socket.socket()
mi_socket.connect (('127.0.0.1', 8000))
MensajeCliente = "Hola, te saludo desde el cliente!"
mi_socket.send(MensajeCliente.encode())
while True:
prompt = input("> ")
if prompt == "close":
print("closing client...")
mi_socket.send(b"close")
break
elif prompt != "":
mi_socket.send(prompt.encode())
mi_socket.close()





Esta conexion, te permite enviar mensajes, y en el lado del servidor los imprime, además si le envias la palabra "close", el servidor al recibir cuya palabra, envia al cliente GoodBye, y cierra el server. Y cuando el cliente recibe el GoodBye este se cierra. Además si hacer Ctrl+C en el script del servidor, este se cierra.
Lo increible, no es lo que ves, sino como es