套接字上的文件结尾是什么意思?

Aar*_*nLS 2 sockets flexbuilder actionscript-3

在Flex Builder 3中使用Action Script 3.

在处理SOCKET_DATA事件时,我偶尔会看似随机,得到"错误#2030:遇到文件结尾".调用socket.readInt()时.我很困惑这个错误意味着什么,因为我不是在读文件?我对套接字有点不了解.谢谢.

Mar*_*off 7

文件结束错误通常意味着套接字的另一端已关闭其连接IIRC.

文件结束的原因是程序中的级别非常低,磁盘上的文件和套接字都用数字表示 - 文件描述符 - 操作系统转换为表示文件的对象或插座或管道或其他什么.

通常,您可以通过检查是否只读取EOF来避免此类错误.如果您确实读过EOF,并尝试再次从套接字/文件中读取,那么您将收到EOF错误.


更新:根据ActionScript 9.0文档,如果另一端关闭套接字,您确实会收到关闭事件.


bac*_*dos 3

当读取已关闭的套接字时,您将得到:Error #2002: Operation attempted on invalid socket.

如果您读取的字节数多于可用字节数,则文件结尾错误通常会发生在任何字节流上。文件、套接字等就是这种情况。对于闪存,它会在从 aSocket或 a读取时发生ByteArray,甚至可能在其他情况下发生。

TCP/IP 是基于包的,但模拟流,因此您只能从流中读取已通过 TCP 包发送给您的数据。检查Socket::bytesAvailable以了解当前有多少字节可用。请始终记住,在一次操作中写入套接字的数据可能会到达多个数据包,每个数据包很可能会导致 Flash 播放器触发socketData事件​​。