javascript - 将 JS 客户端与 Python 服务器连接
我对 JS 和 Python 相对较新,所以这可能是一个初学者问题。我正在尝试将一个字符串从 JS 客户端发送到 Python 服务器(然后将字符串发送到另一个 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 客户端接收。
当我运行服务器和客户端时,连接没有问题:
Connected by ('127.0.0.1', 52602)
Connected by ('127.0.0.1', 52603)
但是,例如,这是我从 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
但是我想要字符串 'lalala'。
有什么想法吗?
(谢谢你!)
答案#1
如果你想连接到 Python TCP 服务器,那么你可以在 Node 中使用类似以下的代码:
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 协议,你就会明白为什么当你的 JS 代码发送那个字符串时会看到那些字符串。
答案#2
socket.socket() 并不会创建一个 WebSocket 服务器。
你应该使用一个 websocket 服务器,查看这个: https://websockets.readthedocs.io/en/stable/
此外,你的 Python 客户端也应该使用 websockets,尽管你仍然可以使用原始套接字发送数据。
