1. 程式人生 > >UDP網路程式設計時出現:Exception in thread "main" java.io.EOFException異常

UDP網路程式設計時出現:Exception in thread "main" java.io.EOFException異常

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就沒有異常了