2016-08-27 3 views
1

저는 JS와 Python에 비교적 익숙합니다. 그래서 이것은 아마도 초보자 용 질문 일 것입니다. 나는 JS 클라이언트에서 파이썬 서버로 문자열을 보내고 그 문자열을 다른 파이썬 클라이언트에 보낸다.JS 클라이언트를 Python 서버에 연결하십시오.

def __init__(self): #inicializacion 
    self.comando = '0' 
    self.HOST = '127.0.0.1' 
    self.PORT = 8484 
    self.cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    fcntl.fcntl(self.cliente, fcntl.F_SETFL, os.O_NONBLOCK) 

def activate(self): 
    print "Plugin de envio en marcha." 

def deactivate(self): 
    print "Plugin de envio off." 

def __call__(self, sample): 
    self.cliente.connect((self.HOST, self.PORT)) 
    try: 
     self.comando = self.cliente.recv(1024).decode('utf-8') 

    except socket.error, e: 
     self.comando = '0' 

    print "******************" 
    print self.comando 
    print "******************" 

나는 무작위를 보낼 아무런 문제가 없습니다 :

JS 클라이언트 :

var socket = io.connect('http://127.0.0.1:8484'); 
    socket.send('lalala'); 

파이썬 서버 :

HOST = '127.0.0.1' 
PORT = 8484 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(2) 

#JS 
conn1, addr1 = s.accept() 
print 'Connected by', addr1 
#PY 
conn2, addr2 = s.accept() 
print 'Connected by', addr2 

while 1: 
    try: 
     data = conn1.recv(1024) 
    except socket.error: 
     print '' 
    if data: 
     print data.decode('utf-8') 
     conn2.send('data') 

파이썬 클라이언트

내 코드입니다 파이썬에서 문자열 서버를 파이썬 클라이언트에 연결했지만 JS 클라이언트에서받을 수 없습니다.

GET /socket.io/1/?t=1472322502274 HTTP/1.1 
Host: 127.0.0.1:8484 
Connection: keep-alive 
Origin: http://127.0.0.1:8880 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 
Accept: */* 
Referer: http://127.0.0.1:8880/normal.html 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: es-ES,es;q=0.8 
Cookie: io=e7675566ceab4aa1991d55cd72c8075c 

그러나 I : 예를 들어

Connected by ('127.0.0.1', 52602) 
Connected by ('127.0.0.1', 52603) 

하지만, 내가 JS에서받는이가있다 : 나는 서버와 클라이언트를 실행하면

가 연결에 문제가 없습니다 'lalala'문자열을 원한다.

아이디어가 있으십니까?

(그리고 당신을 감사합니다!)

답변

1

socket.socket() 가 웹 소켓 서버를 만들지 않습니다.

당신은 웹 소켓 서버를 사용한다,이를 확인 : 당신은 여전히 ​​원시 소켓을 사용하여 데이터를 보낼 수에도 불구하고

https://websockets.readthedocs.io/en/stable/이 또한 파이썬 클라이언트가 너무 websockets를 사용해야합니다.

2

당신은 파이썬 TCP 서버에 연결하려는 경우, 당신은 노드에서 다음과 유사한 코드를 사용할 수 있습니다

var net = require('net'); 

var client = new net.Socket(); 
client.connect(8484, '127.0.0.1', function() { 
    console.log('Connected'); 
    client.write('Hello, server! Love, Client.'); 
}); 

client.on('data', function(data) { 
    console.log('Received: ' + data); 
    client.destroy(); // kill client after server's response 
}); 
당신의 파이썬 코드에 의해 시작 서버는하지 않습니다 원시 TCP 연결을 수신

. HTTP protocol을 읽으면 js 코드가 해당 문자열을 전송할 때 왜 그 문자열을 보았는지 알 수 있습니다.

+0

감사합니다. 하지만 지금이 문제가 있습니다 : required.js : 417 Uncaught Error : 모듈 이름 "net"이 (가) 컨텍스트에 대해 아직로드되지 않았습니다. _. require ([]) http://requirejs.org/docs/errors.html#notloaded를 사용하십시오. 나는 그것을 풀려고했지만, 사용한다면 : require ([ 'net'], function (net) { }); 제가 가지고 required.js : 2,417 GET http://127.0.0.1:8880/net.js 500 (내부 서버 오류) VM1275 : 1 catch되지 구문 에러 예기치 식별자 및 : required.js : 417 catch되지 오류 : 모듈로드 시간 초과 : net http://requirejs.org/docs/errors.html#timeout 아이디어가 있으십니까? – DidiNa

+0

@DidiNa 브라우저에서이 작업을 수행하고 있습니까? –

+0

예, 사용자가 문자열을 쓰는 웹 응용 프로그램이 있습니다. html -> js -> node.js -> python server -> python client. 내 문제는 이제 js에서 node.js로 문자열을 보냅니다. – DidiNa

관련 문제