我的套接字只接收数据,而不接收地址,因此无法向原始发件人发送确认等数据包。我正在用发送方和接收方实现一个返回N。 以下是错误:
Traceback (most recent call last):
File "./netster.py", line 128, in <module>
main()
File "./netster.py", line 120, in main
run_server(args.host, int(args.port), udp=args.udp, rudp = args.rudp, filename=f)
File "./netster.py", line 27, in run_server
rudp_gobackn_recv(port, kwargs['filename'])
File "/Users/a3.py", line 352, in rudp_gobackn_recv
data, client_address = serversocket.recv(1500)
ValueError: too many values to unpack (expected 2)
这是事情的接收方,一个代码片段,显示了我如何初始化数据包和接收数据
serversocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
serversocket.bind(('localhost', port))
...
data, client_address = serversocket.recv(1500)
以下是我设置发件人套接字的方式:
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = (host, port)
发送方和接收方的地址和端口均为
('localhost', 1234)
1234是任意端口号。 以下是我如何设置要发送的数据包(以防万一),以及我如何发送数据包
for x in range(len(window), window_size):
data = file.read(data_size)
if not data:
end_bit = '1'
decoded_data = data.decode('utf-8')
packet = str(nextseqnum) + "@@" + str(end_bit) + "@@" + str(decoded_data)
nextseqnum = str(int(nextseqnum) + 1)
window.append(packet)
if not data:
break
以下是我发送的方式:
for y in range(0, len(window)):
print("Window: ", window)
print("PACKET!!!!", window[y])
packet = window[y]
p = packet.encode('utf-8')
print("Socket ouput: ", clientsocket.sendto(p, server_address))
if(y == 0):
oldest_time = time.time()
如果我更改接收器代码,使其可以编译为:
data = serversocket.recv(1500)
内容的发送方会打印出:
Window: ['1@@0@@abcdefghijklmnopqrstuvwxyz\n', '2@@1@@']
PACKET!!!! 1@@0@@abcdefghijklmnopqrstuvwxyz
Socket ouput: 33
Window: ['1@@0@@abcdefghijklmnopqrstuvwxyz\n', '2@@1@@']
PACKET!!!! 2@@1@@
Socket ouput: 6
有没有想过为什么它只发送数据,而不发送服务器地址?我已经研究了这个问题,但没有成功,并且调试了一段时间
serversocket.recv(1500)
只返回字节,不返回data, client_address
。你在找recvfrom
这应该会让你明白为什么你会犯这样的错误:
相关问题 更多 >
编程相关推荐