【发布时间】:2018-04-04 15:19:33
【问题描述】:
我已经尝试了几种方法来发送一个字符串然后一个对象到我的服务器并让我的服务器doSomething() 然后将一个字符串和一个对象发送回客户端但是到目前为止服务器甚至没有接收到字符串.以下是我目前的方法。
完成发送/接收的服务器代码部分:
try
{
ObjectInputStream fromClientObject = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream toClientObject = new ObjectOutputStream(socket.getOutputStream());
while(!socket.isClosed())
{
//If server has received a message
if(fromClientObject.available() > 0)
{
//Set received message to string and print
String input = fromClientObject.readUTF();
System.out.println(input);
//If clients sets .register command then register new user
if (input.equals(".register"))
{
Object obj = fromClientObject.readObject();
Users user = (Users) obj;
server.registerUsers(user);
}
//If clients sends .findUser command then see if user exists in DB
if (input.equals(".findUser"))
{
//Read object from client
Object obj = fromClientObject.readObject();
Users user = (Users) obj;
//Create a pair and find the user
Pair<Boolean,Users> findUsers;
findUsers = server.findUsers(user); //This checks if the user exists and returns true or false
if(findUsers.getFirst())
{
toClientObject.writeUTF("True");
toClientObject.flush();
toClientObject.writeObject(findUsers.getSecond()); //Send the found user object to the client
toClientObject.flush();
}
else
{
toClientObject.writeUTF("false");
toClientObject.flush();
}
}
}
}
}
catch (IOException | ClassNotFoundException e)
{
e.printStackTrace();
}
我也尝试过使用Scanner 接收字符串和单独的ObjectInputStream 接收对象,但无济于事。
下面是客户端如何接收服务器发送的字符串和对象以及如何向服务器发送信息
try(Socket socket = new Socket(host, portNumber);
ObjectInputStream fromServerObject = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream toServerObject = new ObjectOutputStream(socket.getOutputStream()))
{
Thread.sleep(1000);
//Setup I/O
toServerObject.writeUTF(code); //This is the string
toServerObject.flush();
toServerObject.writeObject(user); //This is a serialised object
toServerObject.flush();
if (code.equals(".findUser"))
{
String input = fromServerObject.readUTF();
Users readUser = (Users) fromServerObject.readObject();
if (input.equals("True"))
{
updateMessage("True");
updateValue(readUser);
} else if (input.equals("false"))
{
updateMessage("False");
}
} else
{
updateMessage("True");
}
}
catch (IOException e)
{
System.err.println("Fatal Connection error!");
e.printStackTrace();
updateMessage("Failed");
}
return null;
关于如何规避这个问题的任何想法?我正在考虑制作单独的函数来编写消息/接收和单独的编写和接收和对象,但我不想在没有获得我当前实现的输入的情况下尝试它。
【问题讨论】: