In socket programming, I am trying to send an object to server, then it is throwing ConcurrentModificationException
. It is not throwing exception in every iteration.
I am trying to send a Serializable
object on server.
Code on client -
Message request = new Message();
request.setMessage("request");
request.setSourceNode(node);
System.out.println("cs enter "+ node.getId());
for(Integer i : clientThread.keySet())
{
//clientThread.get(i).sendMessage("request");
clientThread.get(i).sendMessage(request);
}
Code on server -
public synchronized void sendMessage(Message send)
{
//System.out.println("Client request time stamp" + main.node.getRequestTimestamp());
send.setDestinationNode(destinationNode);
//System.out.println(send.getMessage() + " " + send.getSourceNode().getId() + " "+ send.getDestinationNode().getId());
try {
oos.writeObject(send);
oos.reset();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
StackTrace :
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList.writeObject(ArrayList.java:766)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at Client.sendMessage(Client.java:45)
at Main.csEnter(Main.java:176)
at Main.main(Main.java:75)