Envoyer/recevoir des données avec python socket
J'ai un vpn (en utilisant OpenVPN) avec plusieurs clients connectés à un serveur (à la DigitalOcean). La connexion est très bonne et je suis en mesure d'accéder à chaque client placé derrière leurs respectifs des pare-feu lorsqu'ils sont connectés à leurs routeurs à travers ssh. Je veux utiliser des scripts python pour envoyer automatiquement les fichiers à partir de plusieurs clients au serveur et vice-versa. Voici le code, je suis à l'aide de la mesure:
Serveur:
#!/usr/bin/env python
import socket
from threading import Thread
from SocketServer import ThreadingMixIn
class ClientThread(Thread):
def __init__(self,ip,port):
Thread.__init__(self)
self.ip = ip
self.port = port
print "[+] New thread started for "+ip+":"+str(port)
def run(self):
while True:
data = conn.recv(2048)
if not data: break
print "received data:", data
conn.send(data) # echo
TCP_IP = '0.0.0.0'
TCP_PORT = 62
BUFFER_SIZE = 1024 # Normally 1024
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind((TCP_IP, TCP_PORT))
threads = []
while True:
tcpsock.listen(4)
print "Waiting for incoming connections..."
(conn, (ip,port)) = tcpsock.accept()
newthread = ClientThread(ip,port)
newthread.start()
threads.append(newthread)
for t in threads:
t.join()
Client:
#!/usr/bin/env python
import socket
TCP_IP = '10.8.0.1'
TCP_PORT = 62
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()
print "received data:", data
Le problème est que je ne suis pas en mesure d'obtenir une connexion. Le serveur n'imprime que les "en Attente de connexions entrantes..." et le client ne semble pas trouver son chemin vers le serveur. Est ce que quelqu'un peut jeter un oeil à ce sujet et me donner quelques informations sur le wath je fais de mal?
OriginalL'auteur Kolibri | 2017-02-23
Vous devez vous connecter pour publier un commentaire.
Pouvez-vous essayer quelque chose comme cela?
Maintenant, le client aura quelque chose comme ci-dessous:
La sortie est comme ci-dessous:
Serveur
Pour le client, de
Dans le cas où vous voulez avoir une connexion ouverte entre le client et le serveur, il suffit de garder le client ouvre dans une boucle while infinie et vous pouvez avoir un message de la manipulation à la fin du serveur. Si vous avez besoin que je peux modifier la réponse en conséquence. Espérons que cette aide.
Exécutez tout d'abord le serveur et le client. parce que sans le serveur en cours d'exécution, le client ne sait pas où se connecter.
J'ai couru tout d'abord le serveur, mais ça donne le même résultat: connexion refusée. Pourrait-il être un problème de firewall? Je peux faire un ping sur le serveur ip locale: 10.8.0.1 et ip publique. Mais je ne suis pas en mesure de telnet au serveur avec l'ip..
Quand j'ai configuré le réseau openvpn, j'ai utilisé le port 443 et je suis capable de telnet sur le port 443: telnet 10.8.0.1 443. J'ai aussi en blanc de la réponse, si je lance le code client d'utiliser le port 443, mais je ne peux pas exécuter le code du serveur avec le port depuis le port est déjà utilisé.. qui Devrait me dire quelque chose?
Le port doit être ouvert pour le client pour se connecter. Je ne sais pas quel est le problème que vous rencontrez. Ouvrir un port sur lequel le serveur va être en cours d'exécution et demander au client de se connecter au serveur sur le même port.
OriginalL'auteur Nihal Sharma