2010-12-10 3 views
0

Adobe 플래시 클라이언트와 파이썬 서버 사이의 소켓을 사용하여 데이터를 보내고 가져 오려고합니다. Flash 클라이언트 :파이썬 서버가있는 플래시 소켓

var serverURL = "se.rv.er.ip"; 
var xmlSocket:XMLSocket = new XMLSocket(); 
xmlSocket.connect(serverURL, 50007); 

xmlSocket.addEventListener(DataEvent.DATA, onIncomingData); 

function onIncomingData(event:DataEvent):void 
{ 
    trace("[" + event.type + "] " + event.data); 
} 

xmlSocket.send("Hello World"); 

그리고 파이썬 서버 :

import socket 

HOST = ''     # Symbolic name meaning all available interfaces 
PORT = 50007    # Arbitrary non-privileged port 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(1) 
conn, addr = s.accept() 
print 'Connected by', addr 
while 1: 
    data = conn.recv(1024) 
    if (data): 
     print 'Received', repr(data) 
     # data 
     if(str(repr(data)).find('<policy-file-request/>')!=-1): 
      print 'received policy' 
      conn.send('<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="50007" /></cross-domain-policy>') 
      conn.send('hellow wolrd') 
conn.close() 

하지만이 코드가 작동하지 않습니다. 파이썬 서버의 출력은 : 당신이하지 않은 경우

Connected by ('cl.ie.nt.ip', 3854) 
Received '<policy-file-request/>\x00' 
received policy 

답변

1

당신은 소켓 모듈을 사용하면 안됩니다. 소켓 서버가 필요할 때 SocketServer을 사용하십시오. 그것은이 방식으로 작동한다

import SocketServer 

class MyTCPHandler(SocketServer.BaseRequestHandler): 
    def handle(self): 
      # self.request is the TCP socket connected to the client 
      self.data = self.request.recv(1024).strip() 
      print "%s wrote:" % self.client_address[0] 
      print self.data 
      if '<policy-file-request/>' in self.data: 
       print 'received policy' 
       conn.send('<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="50007" /></cross-domain-policy>') 
       conn.send('hellow wolrd') 

def main(): 
    # Create the server, binding to localhost on port 9999 
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 

    # Activate the server; this will keep running until you 
    # interrupt the program with Ctrl-C 
    server.serve_forever() 

..

+0

가 나는 또한 얻을 당신 스크립트를 127.0.0.1 쓴이 아닌 파이썬 스크립트에서 문제를 생각 : 를 정책을 수신 없음 더 – nucleartux