gpt4 book ai didi

python套接字不能发送多条消息——数据在赋值前被引用——

转载 作者:可可西里 更新时间:2023-11-01 02:47:01 24 4
gpt4 key购买 nike

您好,我正在尝试向 TCP 服务器发送多条消息,但在我的客户端中出现错误,指出在分配之前引用了数据。如果我发送一条消息,则不会出现错误,但如果我尝试发送多条消息,则会返回错误。

TCP 服务器:

class Connect(object):

def __init__(self):
try:
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except:
print('socket cannot be created')
server_address = ('169.254.34.240', 10000)
#print('starting up: ' + server_address)
self.sock.bind(server_address)
self.sock.listen(1)

def listen(self):
while True:
connection, client_address = self.sock.accept()
print('client connected')
try:
data = connection.recv(16)
print(data)
if data == "STATUS":
connection.sendall("vision=ready")
elif data == "MEASURE":
connection.sendall("vision=computing")
elif data == "GET_RESULT":
connection.sendall("x=1.5,y=0.25,z=0.14,a=0.15")
else:
connection.sendall("wrong command")
finally:
connection.close()


def main():
connect = Connect()
connect.listen()

if __name__=='__main__':
main()

我正在发送消息的 tcp 客户端:

class Connect(object):

def __init__(self):
# Create a TCP/IP socket
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect the socket to the port on the server given by the caller
print('connecting to host')
self.sock.connect(('169.254.34.240',10000))

def send(self, command):
try:
message = command
print('sending: ' + message)
self.sock.sendall(message)
amount_received = 0
amount_expected = len(message)
while amount_received < amount_expected:
data = self.sock.recv(16)
amount_received += len(data)
print('received: ' + data)
finally:
self.sock.close()
return data

def main():
connect = Connect()
print connect.send("STATUS")
print connect.send("MEASURE")

if __name__=='__main__':
main()

所以任何人的想法,我想我没有正确结束或什么的,我认为这与我在客户端的时间有关?

最佳答案

问题是您在每次请求后调用 self.sock.close() 而没有创建新套接字。每次关闭后都需要创建一个新套接字。

您可以通过为每个请求创建一个连接来解决这个问题,如下所示:

class Connect(object):

def connect(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('connecting to host')
sock.connect(('127.0.0.1',10000))
return sock

def send(self, command):
sock = self.connect()
recv_data = ""
data = True

print('sending: ' + command)
sock.sendall(command)

while data:
data = sock.recv(1024)
recv_data += data
print('received: ' + data)

sock.close()
return recv_data


def main():
connect = Connect()
print connect.send("STATUS")
print connect.send("MEASURE")

关于python套接字不能发送多条消息——数据在赋值前被引用——,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23382337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com