서로 문자열 메시지를 보낼 수있는 UDP 클라이언트/서버 모델을 설정했습니다.udp를 통해 전송 한 후 직렬화 된 객체에 null 값이 있음
사용자 이름과 비밀번호가 포함 된 서버로 일련 번호가 지정된 LoginRequest 클래스를 생성했습니다. 이러한 변수에 대한 getter가 호출되면 LoginRequest가 전송되기 전에 변수를 검사하더라도 null 값을 반환합니다. 여기
는 직렬화 및 클라이언트에서 데이터 그램을 전송하는 코드입니다 :의 코드 여기private void login(String name, char[] pass) throws SQLException {
try {
LoginRequest login = new LoginRequest(name, pass);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(login);
byte[] buffer= baos.toByteArray();
oos.close();
baos.close();
DatagramPacket packet =
new DatagramPacket(buffer, buffer.length, InetAddress.getByName(SERVER), 10110);
DatagramSocket sSocket = new DatagramSocket();
sSocket.send(packet);
login.getUsername();
} catch (Exception e) {
e.printStackTrace();
}
}
되어 드 직렬화 LoginRequest 및 사용자 이름 읽기 :
여기private void readMessage() {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(cPacket.getData());
ObjectInputStream ois = new ObjectInputStream(bais);
Object obj = ois.readObject();
bais.close();
ois.close();
if(obj instanceof LoginRequest) {
System.out.println("Login request");
LoginRequest login = (LoginRequest) obj;
login.getUsername();
} else {
System.out.println("Not a login request");
}
} catch (Exception e) {
e.printStackTrace();
}
}
는 코드입니다 LoginRequest의 경우 :
public class LoginRequest implements Serializable {
/**
*
*/
private static final long serialVersionUID = -1379800611469143228L;
private static String username;
private static char[] password;
public LoginRequest(String name, char[] pass) {
username = name;
password = pass;
}
public String getUsername() {
System.out.println("Username: " + username);
return username;
}
public char[] getPassword() {
String p = password.toString();
System.out.println("Password: " + p);
return password;
}
}
사용자 이름 또는 비밀 번호를이 deserialization 후 NullPointerException 얻을. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 나는 매우 행복해 할 것입니다.
LoginRequest 코드를 넣을 수 있습니까? 그리고 귀하의 NPE는 어디에서 발생합니까, 귀하의 코드에서 찾을 수 없습니다. 마지막으로, 그러나 이것이 명백합니다. 보내는 쪽에서 이름과 암호가 비어 있지 않은지 확인 했습니까? –
서버 측에서 사용자 이름과 비밀번호가 null이지만 클라이언트 측에서 올바른 값을 제공하면 getPassword()를 호출 할 때 NPE가 표시됩니다. getUsername()은 null 값을 반환합니다. – MachoChild