Senden von 2 Nachrichten an einem SocketServer schlägt fehlt

01/11/2011 - 16:09 von MrSmile | Report spam
Hi Leute!
Ich sende 2 Nachtichten an einem Socketserver.

A) Ich öffne den Socket
B) führe 2x send nachricht aus
C) nur von der ersten erhalte ich eine Nachricht.

Warum, und wer hat die Antwort drauf es so umzuschreiben, dass ich
mehrere Nachrichten senden kann.


Hier den Quelltext:

Der Socketserver

import SocketServer
from ast import literal_eval

class MKTest(object):
DSX = []
MKTestInst = None

def __init__(self,Daten):
MKTest.DSX.append(Daten)

def getObj(Daten):
if MKTest.MKTestInst == None:
MKTest.MKTestInst = MKTest(Daten)
return MKTest.MKTestInst

getObj = staticmethod(getObj)

class MySockX(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request.recv(1024)
data = literal_eval(data)
#MKTest.getObj(data[0])
#MKObj = MKTest(data[0])
MKObj = MKTest.getObj(data[0])
data = MKTest.DSX
data = '%s' % data
self.request.send(data)

if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = SocketServer.TCPServer((HOST,PORT),MySockX)
server.serve_forever()



Der Socketclient:

import socket

data = [100]
received = [None,None]
HOST,PORT = "localhost",9999
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
sock.send('%s' % data)
received[0] = sock.recv(1024)
sock.send('%s' % data)
received[1] = sock.recv(1024)
sock.close()

print received
 

Lesen sie die antworten

#1 Georg Brandl
01/11/2011 - 20:10 | Warnen spam
Am 01.11.2011 16:09, schrieb MrSmile:
Hi Leute!
Ich sende 2 Nachtichten an einem Socketserver.

A) Ich öffne den Socket
B) führe 2x send nachricht aus
C) nur von der ersten erhalte ich eine Nachricht.

Warum, und wer hat die Antwort drauf es so umzuschreiben, dass ich
mehrere Nachrichten senden kann.



Ein "Request" ist für den SocketServer eine Verbindung. Dein Handler
beantwortet also pro Verbindung nur eine Anfrage.

Wenn du die Verbindung lànger benutzen willst, musst du eine Schleife
in deinen RequestHandler einbauen. Du musst außerdem sicherstellen,
nachdem TCP nicht nachrichten- sondern streambasiert ist, dass deine
Nachrichten ordentlich ankommen, d.h. du musst evtl. recv() -- und auch
send() -- mehrfach aufrufen (wenn du ein zeilenbasiertes Protokoll
verwendest, siehe auch sock.makefile() und dessen readline()).

Viele Grüße,
Georg

Ähnliche fragen