python socket - 无法从javascript发送数据

时间:2016-05-22 18:37:29

标签: javascript python sockets python-3.x

我试图让javascript程序将数据发送到python套接字,但它没有收到正确的数据。

我想要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()

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Steffen的回答是正确的(至少在一般情况下 - 不能评论JS细节)。此外,独立验证应用程序的移动部分始终是个好主意,这样您就可以缩小问题的范围。

以下是如何验证您的python服务器是否可以从命令行运行:

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

    连接到它

    telnet localhost 12345

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

  3. 您将看到欢迎消息返回给客户。输入一些文字,然后按Enter

  4. 服务器将打印您的消息并关闭与客户端的连接。
  5. 使用您的代码,以及它如何查找客户端。我将文本meow发送到服务器:

    margold@home-macbook ~ $ 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.
    

    对于服务器:

    margold@home-macbook ~ $ ./server.py
    ('Got connection from', ('127.0.0.1', 61148))
    meow