2010-04-17 69 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