python-2.7 - Python-Sockets:使用 IF 语句的评估行为错误
问题描述
节点.py
import socket
import sys
import time
import pp_json as ppjs
import SWATT as sw
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#Get Client IP
client_IP = sock.getsockname()
#Status message for node
status_message = {'Node ID' : 'NS-1', 'Status' : 'Online', 'Node IP' : client_IP }
#Message serialized
ser_clientMsg = ppjs.pp_json(status_message)
#Start Verification variable initialization
flag = '101'
# Connect the socket to the port where the server is listening
server_address = ('localhost', 10100)
print >>sys.stderr, 'connecting to Verifier at %s port %s' % server_address
sock.connect(server_address)
var=1
try:
print >>sys.stderr, 'Sending Node Status "%s"' % ser_clientMsg
sock.sendall(ser_clientMsg)
# Send data
while var:
recvData = sock.recv(256)
print >>sys.stderr, 'Received from Verifier: "%s" \n' % recvData
if recvData == flag:
print "Starting verification process...\n"
filename = "hello.txt"
fh = open(filename,"r")
temp_str = fh.read()
checksum = sw.SWATT(temp_str, len(temp_str))
sock.sendall(checksum)
finally:
print >>sys.stderr, 'closing socket'
sock.close()
验证器.py
import socket
import sys
import time as t
import json
startTime = t.time()
#Count variable initialization
count = 0
#Send Start Verification Prompt
start_verif = '101'
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#Bind the socket to the port
server_address = ('localhost', 10100)
print >>sys.stderr, 'Starting Verifier on %s port %s' % server_address
sock.bind(server_address)
#Listen for incoming connections
sock.listen(1)
while True:
#Wait for connection
print >>sys.stderr, 'Waiting for connection establishment'
connection, client_address = sock.accept()
try:
print >>sys.stderr, 'Connection from', client_address
#Receive the data in chunks and retransmit it
while True:
if count == 0:
statusData = connection.recv(256)
parsedData = json.loads(statusData)
#print >>sys.stderr, 'Received "%s"' % parsedData
print "Received Node Status: \n", json.dumps(parsedData, indent=4, sort_keys=True)
count+=1
elif count == 1:
print 'Sending Verification Trigger:\n', start_verif
connection.sendall(start_verif)
count+=1
checksum = connection.recv(256)
print "Checksum value from Prover: ", checksum
print "\n"
else:
print >>sys.stderr, 'SWATT successfully computed on Node with Node address: ', client_address
finally:
elapsedTime = t.time() - startTime
print elapsedTime
connection.close()
我想问题出在 Node.py 的第 37 行,因为我可以看到前一行打印的值 101,即 Node 终端上的第 36 行。你能帮我找出错误的确切位置吗?另外,如果您需要我导入的模块的代码,请发表评论。我很乐意随后发布它们。
解决方案
while var:
recvData = sock.recv(256)
print >>sys.stderr, 'Received from Verifier: "%s" \n' % recvData
if recvData == flag:
当您收到数据时,在检查标志之前您还没有解码数据。在 if 语句之前尝试:recvData = recvData.decode('utf-8')
我并没有真正使用 python 2,但据我所知,这应该可以。
推荐阅读
- google-kubernetes-engine - 在 google Kubernetes 中分配安全上下文
- javascript - 如何将信息直接从 EC2 输出到文件(例如 .txt 或 .json)?
- android - 如何在同一包下的 android studio 中发布两个 apk?
- linux - 是否有不使用 shell 将其命令行参数写入文件的 Linux 命令?
- python - 使用延迟屏幕空间贴花系统的边界检查问题
- scala - 在日期列比较上过滤 DataFrame
- java - 在 Jasper Report (Java-Netbeans) 上显示图表线
- azure - 在 Azure Kubernetes 服务 (AKS) 中缩减节点后如何重新安排我的 pod?
- python-3.x - np.nansum 忽略 Counters 中的零
- android - 是否可以同时构建调试版本和发布版本?