2013-10-20 25 views
0

这是来自作业问题,但我对Python不太熟悉,无法找到关于下面的语句中发生的事情的任何信息。从套接字连接中取数据并拆分它

message = connectionSocket.recvfrom(1024) 
filename = message.split()[1] 
f = open(filename[1:]) 

所以,消息只是从客户端连接到connectionSocket并将其放入消息中的数据。从那里我可以知道消息是分裂的,这意味着它在消息中取出字符串并返回一个单词列表(我猜测分隔符只是一个空格)。但那是什么[1]?

它应该是一个网络服务器,所以我想到了一个场景,比如如果我去serverAddress:serverPort/HelloWorld.html消息是'HelloWorld.html“部分,对吗?然后我打开。文件,但我失去的目的[1]和[1:]。

回答

1
filename = message.split()[1] 

你猜(正确地)在message字符串分割并返回一个单词列表

如果这是一个HTTP请求,那么message的前1024个字节将类似于:

"GET /file.html cruft...""GET /path/file.html cruft..."

通过split婷这个字符串你生成一个列表开始:

["GET", "/file.html", "cruft..."]

[1]表示列表内的索引[1]的元素,即第二元素,第一索引位置是[0]。所以filename = "/file.html"或= "/directory/subdirectory/file.html"


f = open(filename[1:]) 

这片无论是在filename,再次使用索引。 [1:]将[1]中的每个元素filename返回到结尾。如果上述假设是正确的,那么它将丢弃前导/并允许打开文件。

+0

作为一个例子什么将在索引0?我是否认为它正在解析HelloWorld.html作为完整的消息,因此f = open(HelloWord.html)? – nitiger

+0

我已经做了一个有根据的猜测,并根据这个假设改进了答案。 – Pines

+0

网址使用正斜杠('/'),而不是反斜杠('\\')。 – jwodder