我遇到了只接收数据而不是地址的套接字问题,因此我无法向原始发送者发送确认之类的数据包。我正在实现一个带有发送者和接收者的go-back-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有没有想过为什么它只发送数据,而不发送服务器地址?我已经研究了这个问题,但没有成功,也调试了一段时间。
发布于 2020-11-09 10:07:38
serversocket.recv(1500)只返回字节,不返回data, client_address。你要找的是recvfrom。
这应该会启发你为什么会犯这样的错误:
>>> data, client_address = b"hello"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
>>> a, b, c, d, e = b"hello"
>>> a, b, c, d, e
(104, 101, 108, 108, 111)https://stackoverflow.com/questions/64744980
复制相似问题