我使用java.net包中,由于某种原因在客户端和服务器之间的套接字关闭或者被损坏写了一个对等网络的网络游戏中的Java。我称之为“点对点”,因为其中一个客户端也运行一个服务器类,它只是一个我编写的接受Socket连接的自定义类 - 一个来自另一台计算机,另一台来自客户端计算机。 正在使用连接来使用ObjectOutputStream和ObjectInputStream来回移动对象。的ObjectOutputStream通过TCP套接字
插座错误不规则发生。出现问题前,连接通常会打开5-10分钟。有时会在新游戏开始时关闭,有时会在游戏进行时关闭。
- 我应该使用keepAlive保持连接打开吗?
- 没有人对我应该如何去解决此问题有何建议?
这里是代码生成错误:
/**
* Continually checks for messages to be read in. Then it
* sends the messages to processMessage if a message is available.
*/
public void listenForMessages() {
int availableBytes;
Object obj = null;
try {
availableBytes = socketStream.available();
if (availableBytes >5) {
obj = in.readObject();
message = (ClientMessage) (obj);
processMessage();
}
}
catch(java.io.StreamCorruptedException utoh) {
System.out.println("Read failed: " + utoh);
try {
System.out.println("Number of Bytes available: " + socketStream.available());
utoh.printStackTrace();
System.out.println("Attempting to close socked.");
socketStream.close();
}
catch(IOException ioe) {
System.out.println("Unable to close: " + ioe.toString());
}
}
catch(IOException e) {
System.out.println("Read failed" + e);
}
以下是错误消息和堆栈跟踪:
Read failed: java.io.StreamCorruptedException: invalid type code: 00
Number of Bytes available: 100
有两个插座(两个流)活性,每个客户。当其他的插座抛出了同样的错误,我看到无效类型代码:FF
堆栈跟踪
java.io.StreamCorruptedException: invalid type code: 00
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1355)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at thornworks.quiz.PlayerInterface.listenForMessages(PlayerInterface.java:227)
at thornworks.quiz.PlayerInterface.actionPerformed(PlayerInterface.java:214)
at javax.swing.Timer.fireActionPerformed(Timer.java:291)
at javax.swing.Timer$DoPostEvent.run(Timer.java:221)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
难以回答无码问题。 – vulkanino 2012-03-08 15:51:37
“套接字错误发生不规则”:*什么*'套接字错误'?把它贴在这里,用堆栈跟踪。 – EJP 2012-03-09 00:15:38
我发布了一些代码和堆栈跟踪。希望有所帮助。 – Thorn 2012-03-09 15:48:31