我必须通过套接字连接到api并发送/接收一些数据。 公司向我发送了一个php示例文件,其中包含从套接字读取数据的代码:
function readAnswer() {
$size = fgets($this->socketPtr, 64);
$answer = "";
$readed = 0;
while($readed < $size) {
$part = fread($this->socketPtr, $size - $readed);
$readed += strlen($part);
$answer .= $part;
}
return $answer;
}
这对我有用。但在python中,我有时会遇到错误。 不是所有的插座都能接收到。 我的python尝试如下所示:
^{pr2}$我以dict/array的形式接收数据。有时我只得到一个int(我想是msg length) 那么从socket读取数据的更好方法是什么呢。 啊,api发送数据的方式是正确的,我检查过了。只是这个小功能;(
在使用下面的代码(感谢falsetru)并添加readed=len(数据)之后,我遇到了另一个问题: 这是正在工作的php代码:
function _parse_answer($answerData)
{
$result = array();
$lines = explode("\n", $answerData);
$data = explode("&", $lines[0]);
foreach($data as $piece)
{
$keyval = explode("=", $piece, 2);
$result[$keyval[0]] = $keyval[1];
}
for($i=1;$i<count($lines);$i++)
{
$result["csv"][]=$lines[$i];
}
return $result;
}
这是我糟糕的python代码:
def parse_answer(self,data):
#print "dd_demo_api: answer: (%s)" % (data)
if data:
result = {}
lines = data.split("\n")
index_list = 0
if len(lines) == 1:
index_list = 0
else:
index_list = 1
pieces = lines[index_list].split("&")
for x in pieces:
keyval = x.split("=")
result[keyval[0]] = keyval[1]
iterlines = iter(lines)
next(iterlines)
next(iterlines)
count = 1
result["csv"] = {}
for x in iterlines:
result["csv"][count] = x.split(";")
return result
else:
return 0
我想这里需要一些优化吗?二)
Python版本与PHP版本不做相同的事情。在
尝试以下代码:
相关问题 更多 >
编程相关推荐