我试图通过套接字传递布尔值,从服务器向客户端发送简单的握手,但似乎简单的代码根本不起作用。迫切需要帮助。
public void sendBool(boolean bool) {
try {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeBoolean(bool);
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean receiveBool() {
boolean bool;
try {
DataInputStream dis = new DataInputStream(s.getInputStream());
bool = dis.readBoolean();
return bool;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
这些是我在服务器的通信线程中用来发送和接收布尔值的方法。
public void sendBool(boolean bool) {
try {
Socket s = new Socket("localhost", 6666);
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeBoolean(bool);
dos.flush();
dos.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean receiveBool() {
boolean bool;
try {
Socket s = new Socket("localhost", 6666);
DataInputStream dis = new DataInputStream(s.getInputStream());
bool = dis.readBoolean();
dis.close();
s.close();
return bool;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
这些是我为客户使用的。现在有问题的代码是客户端的这一部分:
public void register(String id, String password) {
try {
boolean bool = false;
Socket s = new Socket("localhost", 6666);
System.out.println("ChoicesDialog: sending credentials");
Credentials cred = new Credentials(id, password, "_REGISTER_");
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(cred);
System.out.println("ChoicesDialog: Waiting for message...");
bool = receiveBool();
if (bool) {
System.out.println("Successfully registered.");
} else {
System.out.println("Registration unsuccessful.");
}
oos.close();
s.close();
Thread.sleep(50);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (intention.equals("_REGISTER_")) {
if (tempCred.getId().equals(credDB.getByID(tempCred.getId()))) {
System.out.println("CommThread: this user is already registered. Cannot re-register.");
sendBool(false);
} else {
sendBool(true);
credDB.register(tempCred);
}
对于服务器:
if (intention.equals("_REGISTER_")) {
if (tempCred.getId().equals(credDB.getByID(tempCred.getId()))) {
System.out.println("CommThread: this user is already registered. Cannot re-register.");
sendBool(false);
} else {
sendBool(true);
credDB.register(tempCred);
}
然而,当我一起运行服务器和客户端时,所有发生的事情是服务器确实通过套接字发送布尔值,但是客户端从未接收到它,并且由此产生的难题是我的客户端在按下之后卡住了按钮上传数据。
我使用本地主机地址作为套接字的IP,并且我已经能够通过相同的套接字传递其他类型的数据以包含序列化对象,因此我不确定是什么问题在这里。
无法解决这个问题,我们将非常感谢任何帮助。