我在java中使用套接字和 serverSocket 制作了一个简单的备份程序,但我的程序运行不正常。
简称:
我有两个类ClientModel和ServerModel,问题是:
writeUTF
- > ServerModel readUTF
//正确接收writeObject
- > ServerModel readObject
//正确接收writeUTF
发送true或false readUTF
中的字符串,但字符串永远不会出现。我的流程出了什么问题?我该如何解决?我在下面发布了一个代码。提前谢谢。
更长版本
当用户点击按钮"连接到服务器"在客户端GUI中,然后clientModel通过writeUTF()
发送一个字符串,该字符串由服务器正确接收,之后客户端立即通过ObjectOutputStream
发送一个服务器正确接收的对象。该对象代表用户(登录名和密码)。我的服务器正在检查该用户是否在服务器中注册,如果是,服务器将通过true
发送字符串writeUTF
,但ClientModel无法获取该字符串。
看我的代码:
ClientModel中的第一个方法
public boolean autoryzacja() throws IOException {
boolean wartosc = false;
OutputStream strumien_wy = gniazdko.getOutputStream(); //socket was created before
InputStream strumien_we = gniazdko.getInputStream();
ObjectOutputStream strumien_obiektowy_wy = new ObjectOutputStream(strumien_wy);
ObjectInputStream strumien_obiektowy_we = new ObjectInputStream(strumien_we);
strumien_obiektowy_wy.writeUTF("AUTORYZACJA"); // correct
strumien_obiektowy_wy.writeObject(uzytkownik); // correct
String wynik = "";
while(strumien_obiektowy_we.available()>0){ // I never be here
wynik = strumien_obiektowy_we.readUTF(); // problem here
}
if (wynik.equals("true")) {
System.out.println("uzytkownik jest zarejstrowany na serwerze");
wartosc = true;
}
return wartosc;
}
ServerModel中的方法
public void run() {
lista_uzytkownikow = pobierzUzytkownikow();
String akcja = null;
try {
ObjectInputStream obiektowy_wej = new ObjectInputStream(gniazdko.getInputStream());
ObjectOutputStream obiektowy_wyj = new ObjectOutputStream(gniazdko.getOutputStream());
akcja = obiektowy_wej.readUTF(); // correct
switch (akcja) {
case "AUTORYZACJA":
try {
Uzytkownik user_temp = (Uzytkownik) obiektowy_wej.readObject(); // corrrect
if (znajdzUzytkownika(user_temp)) {
obiektowy_wyj.writeUTF("JEST"); // problem here
System.out.println("jestem w case autoryzacja");
} else {
obiektowy_wyj.writeUTF("BRAK");
}
break;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// System.out.println(akcja);
System.out.println(Thread.currentThread().getId());
// odbierzPlikWatkowy();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}