Java通过套接字接收对象
我正在为大学开发一款刽子手游戏。它需要通过套接字,服务器和客户端。现在游戏运行良好 但是当它由两个人播放,试图猜同一个单词时,我需要知道一个用户选择哪个字母,这样我就可以在另一个用户GUI上禁用该字母 因此,我试图发送一个id为的信件对象,该id将禁用另一侧的按钮,我首先发送一条消息,警告我将发送一个对象,因此我没有收到异常Java通过套接字接收对象,java,sockets,object,Java,Sockets,Object,我正在为大学开发一款刽子手游戏。它需要通过套接字,服务器和客户端。现在游戏运行良好 但是当它由两个人播放,试图猜同一个单词时,我需要知道一个用户选择哪个字母,这样我就可以在另一个用户GUI上禁用该字母 因此,我试图发送一个id为的信件对象,该id将禁用另一侧的按钮,我首先发送一条消息,警告我将发送一个对象,因此我没有收到异常 但是它只读取我发送的前两个对象,在第三个对象上,我得到一个异常,名为java.io.StreamCorruptedException。有人知道为什么吗 Sendin
但是它只读取我发送的前两个对象,在第三个对象上,我得到一个异常,名为java.io.StreamCorruptedException。有人知道为什么吗
Sending:
toClient= new DataOutputStream(socketConection.getOutputStream());
toClient.writeBytes("VK_Letra\n");
objectToClient= new ObjectOutputStream(socketConetion.getOutputStream());
objectToClient.writeObject(new Letter());
objectToClient.flush();
Receiving:
fromServer = new BufferedReader(new InputStreamReader(socketCliente.getInputStream()));
objectFromServer = new ObjectInputStream(socketCliente.getInputStream());
public void run(){
String str;
try{
while(true){
str = fromServer.readLine();
if(str.equals("VK_Letter")){
Letter l = (Letter) objectFromServer.readObject();
System.out.println(l.getLetter());
button[l.getId()].setEnabled(false);
}else{
chat.append(str+ "\n");
chat.setCaretPosition(chat.getDocument().getLength());
}
}
}catch(IOException | ClassNotFoundException e){
JOptionPane.showMessageDialog(/* Error Message */);
}
}
我将使用的方法是将所有东西都作为一个对象,这样您只发送和接收对象。然后,对象将指示实际消息以及任何参数、参数或数据
您正在混淆读取行和获取对象。一个常见的混淆源是在同一个流上混合不同的流类型 你有两个不同问题的好例子
- 不应在同一个流上使用多个流,例如DataOutputStream和ObjectOutputStream
- 您不应该混合使用二进制和文本流,例如BufferedReader和ObjectInputStream
解决方案是使用一个,而且只有一个,它适合您的需要并使用它。请发布您得到的异常!提示:尝试只使用一种语言命名方法和对象,最好使用英语。副客户=葡萄牙人;fromServer=英语;我将尝试只使用ObjectInputStream和ObjectOutputStream,并使用instanceof来区分不同类型的对象(单词、字母和消息)。谢谢