The variable is is read in both the ClientsListener and Client Main files since the is variable is used as an argument for the ClientsListener file. Could this lead to a a java.io.StreamCorruptedException: invalid type code: AC error?
package chatRoom2;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;
public class ClientMain
{
public static void main(String[] args)
{
try {
ChatRoomInfo info = new ChatRoomInfo(); //How should the infos communicate?
Scanner s = new Scanner(System.in);
System.out.println("Enter your name:");
String username = s.nextLine();
while (!ChatRoomInfo.nameIsAvailable(username))
{
System.out.println("Enter your name:");
username = s.nextLine();
}
System.out.println("Enter the ip address of the server:");
String address = s.nextLine();
s.close();
Socket socket = new Socket(address,8001);
ObjectInputStream is = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Connected as " + username);
CommandFromServer cfs = (CommandFromServer) is.readObject();
ChatRoomFrame2 frame = new ChatRoomFrame2(os, username);
ClientsListener cl = new ClientsListener(is,os,frame);
Thread t = new Thread(cl);
t.start();
os.writeObject(new CommandFromClient(CommandFromClient.JOINED, username, ""));
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
package chatRoom2;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class ServerMain
{
ServersListener sl;
public static ArrayList<ObjectOutputStream> oos = new ArrayList<ObjectOutputStream>();
public static ArrayList<ObjectInputStream> ois = new ArrayList<ObjectInputStream>();
public static ArrayList<Socket> sockets = new ArrayList<Socket>();
public static void main(String[] args)
{
try
{
ServerSocket serverSocket = new ServerSocket(8000);
while(true)
{
Socket a = new Socket();
a = serverSocket.accept();
sockets.add(a);
ObjectOutputStream b = new ObjectOutputStream(a.getOutputStream());
ObjectInputStream c = new ObjectInputStream(a.getInputStream());
ServersListener sl = new ServersListener(c, b);
ObjectOutputStream os = new ObjectOutputStream(a.getOutputStream());
ObjectInputStream is = new ObjectInputStream(a.getInputStream());
Thread t = new Thread(new ServersListener(is,os));
t.start();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
This is the console output. Everything works as expected until "java.io.StreamCorruptedException: invalid type code: AC."
Enter your name:
k
Enter the ip address of the server:
127.0.0.1
Connected as k
java.io.StreamCorruptedException: invalid type code: AC
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1775)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:514)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:472)
at chatRoom2.ClientMain.main(ClientMain.java:37)