UDP網路程式設計時出現:Exception in thread "main" java.io.EOFException異常
阿新 • • 發佈:2019-01-25
import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import com.sun.org.apache.bcel.internal.generic.NEW; /* * server端 */ public class UDPServer { public static void main(String[] args) throws IOException{ // 建立server端+埠 DatagramSocket server = new DatagramSocket(8888); // 建立接收容器(位元組陣列),將容器裝換成DatagramPacket byte[] container = new byte[6]; DatagramPacket packet = new DatagramPacket(container, container.length); // server端接收DatagramPacket包 server.receive(packet); // 得到包裡的資料 byte[] data = packet.getData(); UDPServer uServer = new UDPServer(); System.out.println(uServer.getDataDouble(data)); // 釋放資源 server.close(); } public String getDataString(byte[] data){ String convertString = new String(data,0,data.length); return convertString; } public double getDataDouble(byte[] data) throws IOException{ // byte[] --> byte[]輸入流 --> data輸入流 --> double ByteArrayInputStream bArrayInputStream = new ByteArrayInputStream(data); DataInputStream dInputStream = new DataInputStream(bArrayInputStream); double convertData = dInputStream.readDouble(); dInputStream.close(); return convertData; } }
出現:Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readFully(Unknown Source)
at java.io.DataInputStream.readLong(Unknown Source)
at java.io.DataInputStream.readDouble(Unknown Source)
at learn.lesson8.Socket.UDP.UDPServer.getDataDouble(UDPServer.java:43)
at learn.lesson8.Socket.UDP.UDPServer.main(UDPServer.java:28)
原因:建立接收容器(位元組陣列)byte[] container = new byte[6]時陣列的長度不夠,將6改為1024就沒有異常了