【发布时间】:2013-12-06 19:19:37
【问题描述】:
设置:我有一个服务器,应该能够发送和接收 XML 数据。客户端连接到套接字并首先从服务器接收 XML。然后客户端应该能够修改 XML 并将其发送回服务器。
XML 文件(在本例中)保存为简单字符串(因此无论是字符串还是 XML)。
到目前为止我有什么:
def startServer(port,xml_data):
print "Starting server, listing to port %d" % port
s = socket(AF_INET, SOCK_STREAM)
s.bind(("", port))
s.listen(5)
while True:
client, address = s.accept()
print "Accepted connection from remote client at " + str(address)
client.send(xml_data)
client.close()
s.close()
所以当客户端连接到服务器时,xml_data 被发送到客户端,然后连接被关闭。但这不是我想要的:我想在客户端修改 XML(或字符串),然后将其发回或从服务器再次检索。我认为一个解决方案是在发送方法之前放置一个“data = client.recv(1024)”并将所有内容放在一个循环中。然后我会确定一些关键字(例如send$、get$),这些关键字将在客户端消息中发送并在服务器上用于决定要做什么。
应该是这样的(不确定语法是否有效):
def startServer(port,xml_data):
print "Starting server, listing to port %d" % port
s = socket(AF_INET, SOCK_STREAM)
s.bind(("", port))
s.listen(5)
while True:
client, address = s.accept()
print "Accepted connection from remote client at " + str(address)
client.send(xml_data) #first time, XML gets sent
while True:
data = client.recv(1024)
keyword = data.split("$",1)[0] #split only first "$"
if keyword == "get": #client wants to get data
client.send(xml_data)
elif keyword == "send" #client wants to send data
received_data = data.split("$",1)[1]
#received_data can be used for further processing
else:
break
client.close()
s.close()
因此,如果我有一个 XML(作为字符串)并且客户端想要将其发送到服务器,我将在消息的开头插入密钥,例如发送$
最后,我的问题是:这是一个好的方法,还是你会推荐一些不同的方法?
【问题讨论】:
-
为了对我们需要大局的方法发表意见,谁是这个的用户(客户)?他们将如何编辑 XML 并将其发回?
-
好的!带有服务器的系统是一个嵌入式系统。我尝试使用 XML 远程编辑配置。作为第一步,客户端只能在一个窗口中显示加载的 XML,并且用户可以编辑这个窗口内容(还不是用户友好的)。但问题是,XML 内容是作为一个简单的字符串处理的。连接不需要处理多个连接,只需一个Client即可连接。
标签: python sockets communication