private String GetUserByFingerprint(String fp) { String sError = null; try { DatagramSocket sockUdp = new DatagramSocket(); sockUdp.setSoTimeout(8000); InetAddress adrs_Idsvr = InetAddress.getByName("127.0.0.1");// seidsvr.jar UDP 17020 byte[] wbuf = String.format("SysID=wssvr;Finger=%s;", fp).getBytes(); // fp: 0301... DatagramPacket wPkt = new DatagramPacket(wbuf, wbuf.length, adrs_Idsvr, 17020); sockUdp.send(wPkt); Thread.sleep(1000); byte[] rbuf = new byte[256]; DatagramPacket rPacket = new DatagramPacket(rbuf, rbuf.length); sockUdp.receive(rPacket);// Blocking... sockUdp.close(); String sBuf = new String(rbuf); // DevMsg=90,{UserName}; int iEqual = sBuf.indexOf('='); int iComma = sBuf.indexOf(','); int iCol = sBuf.indexOf(';'); if (iEqual>0 && iComma>0 && iCol>0) { if (iComma+1 == iCol) // not match return null; else return String.format("{\"UserName\":\"%s\", \"MatchScore\":%s}", sBuf.substring(iComma+1, iCol), sBuf.substring(iEqual+1, iComma)); } else { sError = sBuf; } } catch (Exception e) { sError = "GetUserByFingerprint: "+e.getMessage(); log.error(sError); } return String.format("{\"ErrorMessage\":\"%s\"}", sError); }
时间: 2024-04-28 10:19:25 浏览: 162
这段代码看起来像是一个 Java 方法,它的作用是根据指纹获取用户信息。它使用了 UDP 协议向本地地址为 127.0.0.1、端口号为 17020 的服务器发送了一个字符串,其中包含了系统 ID 和指纹信息。然后该方法等待 1000 毫秒,接收从服务器返回的消息,并解析该消息以获取用户名和匹配得分。如果解析失败,则该方法将返回错误消息。
相关问题
错误使用 openUDP (line 37) Java exception occurred: java.net.BindException: Address already in use: Cannot bind at java.net.DualStackPlainDatagramSocketImpl.socketBind(Native Method) at java.net.DualStackPlainDatagramSocketImpl.bind0(DualStackPlainDatagramSocketImpl.java:84) at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:93) at java.net.DatagramSocket.bind(DatagramSocket.java:392) at java.net.DatagramSocket.<init>(DatagramSocket.java:242) at java.net.DatagramSocket.<init>(DatagramSocket.java:299) at java.net.DatagramSocket.<init>(DatagramSocket.java:271) at gov.nasa.xpc.XPlaneConnect.<init>(XPlaneConnect.java:152) 出错 Example (line 13) Socket = openUDP('127.0.0.1', 49000, 49001);
这个错误是由于在调用 `openUDP` 函数时,指定的本地端口已经被其他程序占用了。您可以尝试更换一个端口号,或者找到占用该端口的程序并停止它。
另外,如果您在之前的程序运行中没有正确地关闭 UDP 连接,也有可能导致该端口被占用。因此,为了避免这种情况,建议在程序结束之前,调用 `closeUDP` 函数关闭 UDP 连接。
希望这些信息能够对您有所帮助。如果还有其他问题,请随时提问。
Thread t = new Thread(r); t.start(); DatagramSocket ds = null; try { ds = new DatagramSocket(); while (true) { String line = scan.nextLine(); if (null != line) { line = port + ":" + line; DatagramPacket dp = new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName("localhost"), 9901); try { ds.send(dp); } catch (IOException e) { e.printStackTrace(); } } else { continue; } } }catch( SocketException e) { e.printStackTrace(); }catch( UnknownHostException e1) { e1.printStackTrace(); }finally { if (null != ds) { } } }; } }
这段代码是一个简单的UDP聊天客户端的实现。首先通过Scanner获取用户输入的监听端口,然后创建一个线程用于接收来自服务器的消息。在该线程中,通过DatagramSocket监听指定的端口,不断接收来自服务器的消息,并将其打印出来。接着,在主线程中,也创建一个DatagramSocket,用于向服务器发送消息。主线程通过Scanner获取用户输入的消息,构造一个DatagramPacket对象,将其发送给服务器。其中,InetAddress.getByName("localhost")指定了服务器地址为本地主机,端口号为9901,可以根据实际情况进行修改。整个程序通过循环实现了不断的消息收发。
阅读全文