2016-05-22 66 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