2016-05-22 36 views
0

我试图让一个javascript程序发送数据到一个python套接字,但它没有收到正确的数据。蟒蛇套接字 - 不能从javascript发送数据

我想python打印'aaaa'。

这里是我的javascript代码:

function createCORSRequest(method, url) { 
    var xhr = new XMLHttpRequest(); 
    if ("withCredentials" in xhr) { 

    xhr.open(method, url, true); 

    } else if (typeof XDomainRequest != "undefined") { 

    xhr = new XDomainRequest(); 
    xhr.open(method, url); 

    } else { 

    xhr = null; 

    } 
    return xhr; 
} 



var xhr = createCORSRequest('GET', "http://192.168.1.10:12345"); 


xhr.send("aaaa"); 

这里是我的Python代码:

import socket 

s = socket.socket() 
host = socket.gethostname() 
port = 12345 
BUFFER_SIZE = 1024 
s.bind(('', port)) 

s.listen(5) 
while True: 
    c, addr = s.accept() 
    print ('Got connection from', addr) 
    c.send(bytes('Thank you for connecting','UTF-8')) 
    data = c.recv(BUFFER_SIZE) 
    print(data) 
    c.close() 
+0

你通过浏览器发送的JavaScript? –

+0

是的,我通过我的浏览器发送JavaScript – zaka100

回答

1
  1. 你正在做一个XMLHttpRequest,这是一个HTTP请求。但是你的python服务器根本不处理HTTP协议。处理HTTP意味着读取HTTP请求头,根据头中的信息读取正文并返回正确的HTTP响应。
  2. 您正在执行HTTP GET请求。 GET请求无需负载,因此您添加的任何正文数据(即xhr.send("aaaa")中的"aaaa")将被忽略(表示:不发送)。发送HTTP身体使用请求类型,如POST。
1

Steffen的回答是正确的(至少在一般情况下 - 不能评论JS的具体情况)。此外,独立验证应用程序的移动部分总是一个好主意,以便您可以缩小问题的位置。

这里是你如何验证你的Python服务器的命令行工作:

  1. 启动服务器
  2. 在另一个终端窗口,使用telnet

    telnet localhost 12345

    连接到它

    (它会首先尝试使用IPv6进行连接,失败并回退到IPv4)

  3. 你会看到你的欢迎消息返回给客户端。输入一些文字并按Enter

  4. 服务器将打印您的消息并关闭与客户端的连接。

使用你的代码,这里是它将如何寻找客户端。我发送文本meow到服务器:

[email protected] ~ $ telnet 127.0.0.1 12345 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
Thank you for connectingmeow 
Connection closed by foreign host. 

和服务器:

[email protected] ~ $ ./server.py 
('Got connection from', ('127.0.0.1', 61148)) 
meow