2016-08-27 24 views
1

私はJSとPythonには比較的新しいので、これはおそらく初心者の質問です。 JSクライアントからPython Serverに文字列を送信しようとしています(文字列を別のPythonクライアントに送信しようとしています)。JSクライアントとPythonサーバーを接続する

これは私のコードです:

JSクライアント:

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

Pythonのサーバー:

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') 

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 "******************" 

私はランダムに送信問題はありませんPythonからの文字列サーバーをPythonクライアントに接続できますが、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()はWebSocketのサーバーを作成しません。

あなたはWebSocketのサーバーを使用する必要があり、これを確認:あなたはまだrawソケットを使用してデータを送ることができていても

https://websockets.readthedocs.io/en/stable/はまた、あなたのpythonのクライアントは、あまりにもwebsocketsを使用する必要があります。

2

あなたはPythonの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 
}); 

をあなたのPythonコードによって開始されたサーバは、生の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:2417 GET http://127.0.0.1:8880/net.js 500(内部サーバーエラー) VM1275:1キャッチされないでSyntaxError:予期しない識別子 と: required.js:417不明なエラーを:モジュールのロードタイムアウト:ネット http://requirejs.org/docs/errors.html#timeout アイデア? – DidiNa

+0

@DidiNaブラウザでこれを行いますか? –

+0

はい、私はユーザーが文字列を書くWebアプリケーションを持っています:html - > js - > node.js - > python server - > python client。私の問題は今、jsからnode.jsに文字列を送ることです。 – DidiNa

関連する問題