J'ai écrit un programme de serveur client dans lequel le serveur envoie un programme au client et le client exécute le programme reçu. Dans ce cas, il s'agit d'un programme de dessin au trait dans OpenGL. Le problème est que lors de l'exécution du serveur et du client, l'ensemble du programme, c'est-à-dire l'envoi du programme à l'exécution du serveur et du client, a lieu parfois, mais parfois l'exécution n'a pas lieu. Le client se connecte et se bloque. Le programme ne s'arrête pas non plus. La même chose fonctionne dans le système de mes amis, mais dans le mien, cela ne fonctionne que très rarement (la plupart du temps). Quelle pourrait être la raison? Est-ce que je manque quelque chose?Problème de programmation réseau
Mon code serveur:
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
import sys
import threading
import os
import socket
class ClientThread (threading.Thread):
# Override Thread's __init__ method to accept the parameters needed:
def __init__ (self, channel, details):
self.channel = channel
self.details = details
threading.Thread.__init__ (self)
#Codes to be executed when thread is executed:
def run (self):
a1=self.channel.recv(1024)
print "client says:"+a1
print 'Received connection:', self.details [ 0 ]
finp = open("stringcheck.py","r")
#self.channel.send("#start\n")
info = finp.readlines()
for record in info:
self.channel.send(record)
#self.channel.send(info)
self.channel.send("#p")
server = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
server.bind (('127.0.0.1', 4500))
#Listens for connections made to socket.
#Specifies maximum number of queued connection.
server.listen (5)
while True:
channel, details = server.accept()
#Create an instance of thread class and call its start method.
ClientThread (channel, details).start()
Mon code client:
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
OpenGL.ERROR_CHECKING=False
import os
import socket
import threading
import thread
import subprocess
class ConnectionThread(threading.Thread):
def run (self):
client = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 9000))
client.send("connected")
a=client.recv(1024)
b=a
f=1
while f:
print 'sdf'
a = client.recv(1024)
print 'qwe'
if a=="#p":
f=0
break
b+=a
print b
exec(b)
client.close()
ConnectionThread().start()
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
OpenGL.ERROR_CHECKING=False
import os
import socket
import threading
import thread
import subprocess
class ConnectionThread(threading.Thread):
def run (self):
client = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 9000))
client.send("connected")
a=client.recv(1024)
b=a
f=1
while f:
a = client.recv(1024)
print 'qwe'
if a=="#p":
f=0
break
b+=a
print b
exec(b)
client.close()
ConnectionThread().start()
Indentation à espace unique ... pouvez-vous lire ceci? Sans piquer tes yeux? – thkala
Y a-t-il une raison pour laquelle vous devez implémenter les threads vous-même, au lieu de simplement utiliser par exemple. Tordu? – Kimvais
@Kimvais: il utilise le module 'threading' intégré. il est beaucoup plus léger que Twisted, et il est livré en standard dans toutes les distributions python. Alors, où est le problème ? –