2008-11-12 176 views
1

我無法使用Actionscript 3的Socket()對象發送簡單的HTTP請求。我的onConnect聽衆低於:嘗試通過套接字發送HTTP請求

function sConnect(e:Event):void { 
    trace('connected'); 
    s.writeUTFBytes('GET /outernet/client/rss/reddit-feeds HTTP/1.1\r\n'); 
    s.writeUTFBytes('Host: 208.43.71.50:8080\r\n'); 
    s.writeUTFBytes('Connection: Keep-alive\r\n'); 
    s.flush(); 
} 

使用數據包嗅探器,可以看我的要求確實會發送到服務器,但該數據包嗅探器無法識別的協議爲HTTP喜歡它與其他HTTP服務呢。當我運行這個時,服務器最終斷開了我的連接。我試圖連接到其他簡單的Apache服務器,只是得到格式錯誤的請求錯誤。

我在這裏錯過了什麼?

回答

12

您必須在刷新之前向流寫入另一個「\ r \ n」,以通知HTTP服務器您已完成發送標頭。

0

而不是使用UTF,嘗試使用ANSI/ASCII。編碼可能是問題的原因。

1

原來我的請求沒有發送空白行到HTTP服務器。從原作的以下小調整:

function sConnect(e:Event):void { 
    trace('connected'); 
    s.writeUTFBytes('GET /outernet/client/rss/reddit-feeds HTTP/1.1\r\n'); 
    s.writeUTFBytes('Host: 208.43.71.50:8080\r\n'); 
    s.writeUTFBytes('Connection: Keep-alive\r\n\r\n'); 
    s.flush(); 
} 

請注意最後writeUTFBytes之後的額外\ r \ n。非常感謝Brian。

編輯:謝謝格雷姆。

0

我只是浪費了很多時間來追蹤Flash 10和Linux與writeMultiByte()的某些組合中的一個嚴重錯誤。我會非常懷疑使用writeMultiByte()。

我希望這可以幫助你。