java - python 无法从网络打印解压的 float

标签 java python sockets

我尝试从 UDP 数据报中获取 float 并打印它们以进行验证:

import socket
from struct import *

socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
socket.bind( ('127.0.0.1', 2416) )
msg = bytearray( 4*1024 ) 
f1 = 0.0
f2 = 0.0
f3 = 0.0
while True:
    nBytes = socket.recv_into( msg )
    print( '%d bytes received' % nBytes )
    (f1) = unpack_from( '!f', msg, 0 )
    (f2) = unpack_from( '!f', msg, 4 )
    (f3) = unpack_from( '!f', msg, 8 )
    print( '%f, %f, %f received' % ( f1, f2, f3 ))

出现以下错误:

$ python Server.py
12 bytes received
Traceback (most recent call last):
  File "Server.py", line 13, in <module>
    print( '%f, %f, %f received' % ( f1, f2, f3 ))
TypeError: a float is required

预期输出为收到 1.2、3.4、5.6

上下文:

Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32

有关 Java UDP 发送方(客户端)的信息:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.ByteBuffer;

public class Client {

   public static void main( String[] args ) throws Exception {
      try( DatagramSocket clientSocket = new DatagramSocket()) {
         InetAddress target = InetAddress.getByName( "localhost" );
         ByteBuffer msg = ByteBuffer.allocate( 4*1024 );
         for(;;) {
            msg.clear();
            msg.putFloat(   1.20f );
            msg.putFloat(   3.40f );
            msg.putFloat(   5.60f );
            msg.putDouble(  7.80  );
            msg.putDouble(  9.10  );
            msg.putDouble( 11.120 );
            msg.flip();
            clientSocket.send(
               new DatagramPacket( msg.array(), msg.limit(), target, 2416 ));
            Thread.sleep( 2000 );
         }
      }
   }
}

最佳答案

这一行是问题所在:

(f1) = unpack_from( '!f', msg, 0 )

尝试

(f1,) = unpack_from( '!f', msg, 0 )

请注意附加的逗号。其他两行也类似。

正如您所提到的,unpack_from 返回一个元组。 (f1) 不是元组,它是单个值。 (f1,) 是一个包含一个元素的元组。

关于java - python 无法从网络打印解压的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15691720/

相关文章:

java - 将 Json 文件反序列化为包含以对象为键的映射的 java 对象

java - Scala jar : Error: Could not find or load main class

python - 在条件下追加到字典列表中的嵌套列表

java - 从另一个 JFrame 执行 JFrame

java - html :radio dynamic values value

python - 如何修复 "Can' t find a default Python”错误

python - 为什么我要在 pandas 中复制数据框

java - 通过 TCP/IP 从 Droid 发送恒定速率数据流

perl - 无法通过Perl中的Sock代理连接到主机

java - 缓冲图像对象的透明度