2010-04-17 72 views
0

我想在iPhone上編寫一個簡單的客戶端,該客戶端只使用bsd套接字從http服務器下載文件。 我搜索了網頁,但找不到有用的東西。你能給我一個方向嗎?只有套接字下載文件

感謝

亞歷

+0

爲什麼你需要這樣做?僅僅是爲了學習BSD套接字?無論如何,使用BSD套接字編寫FTP或HTTP客戶端會很容易,並且不難找到一個示例。你也想寫一個服務器嗎? – 2010-04-17 19:27:50

+0

諾普只需要客戶端。它是iphone應用程序的一部分。簡單地說,高級別的可可類是不夠的 – Alex1987 2010-04-17 19:30:31

+0

只是試圖澄清... 所以,你想在你的iPhone上編寫一個Objective-C程序,該程序將轉到常規(不是http或FTP)服務器上,網頁。 – 2010-04-17 19:44:29

回答

0

這取決於服務器給你的文件的性質。它可能是FTP,HTTP,網絡文件共享,甚至像Gopher或scp。在任何情況下,問題的基本性質都是相同的:

  1. 將套接字連接到要使用connect聯繫的服務器。
  2. 使用該服務器理解協議(FTP,HTTP等)
  3. read由服務器返回的數據發送請求,並將其保存到本地文件
+0

是的,我忘了提 - 它是http。有沒有可以幫助我的代碼片段/教程? – Alex1987 2010-04-17 19:28:00

0

一個例子從http://docs.python.org/library/socket.html

將轉換爲C以及處理文件作爲練習留給讀者。

# Echo server program 
import socket 

HOST = ''     # Symbolic name meaning all available interfaces 
PORT = 50007    # Arbitrary non-privileged port 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(1) 
conn, addr = s.accept() 
print 'Connected by', addr 
while 1: 
    data = conn.recv(1024) 
    if not data: break 
    conn.send(data) 
conn.close() 


# Echo client program 
import socket 

HOST = 'daring.cwi.nl' # The remote host 
PORT = 50007    # The same port as used by the server 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((HOST, PORT)) 
s.send('Hello, world') 
data = s.recv(1024) 
s.close() 
print 'Received', repr(data) 
+0

我已經有一個代碼爲你好世界客戶端服務器,但我希望看到一個客戶端從http服務器下載文件。無論如何感謝 – Alex1987 2010-04-17 19:32:30

+0

你沒有說服務器是一個HTTP服務器:P 然後,你必須發送一個HTTP請求與套接字 和解析HTTP頭響應,看看是否是多部分響應和編碼和相當多的http兼容的東西。我認爲你最好的選擇是查看wget http://www.gnu.org/software/wget/的源代碼,看看如何完成。 – fabrizioM 2010-04-17 20:08:57

相關問題