Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Flash AS3套接字读取较大的数据包+;代码确认_Java_Actionscript 3_Flash_Sockets - Fatal编程技术网

Java Flash AS3套接字读取较大的数据包+;代码确认

Java Flash AS3套接字读取较大的数据包+;代码确认,java,actionscript-3,flash,sockets,Java,Actionscript 3,Flash,Sockets,所以我四处阅读,很明显网络将数据包分解成更小的块或其他东西,并分别发送它们,但java不知道应该接收的字节的总大小。我在数据包中添加了一个bytesize前缀,以便它知道要读取多少 while ( inputStream.available() != -1 ) { int packetSize = inputStream.readByte() ; if ( packetSize == -1 ) {

所以我四处阅读,很明显网络将数据包分解成更小的块或其他东西,并分别发送它们,但java不知道应该接收的字节的总大小。我在数据包中添加了一个bytesize前缀,以便它知道要读取多少

while ( inputStream.available() != -1 )
        {
            int packetSize = inputStream.readByte() ;

            if ( packetSize == -1 )
            {
                closeConnection();
            }

            debug( "read bytearray size:" + packetSize );
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            byte packetBuffer[] = new byte[packetSize];
            int byteTrans = 0;
            while ( byteTrans < packetSize )
            {inputStream.read() );
                inputStream.read( packetBuffer , byteTrans , 1 );
                byteTrans++;
            }
while(inputStream.available()!=-1)
{
int packetSize=inputStream.readByte();
如果(packetSize==-1)
{
closeConnection();
}
调试(“读取字节数组大小:“+packetSize”);
ByteArrayOutputStream bout=新建ByteArrayOutputStream();
字节packetBuffer[]=新字节[packetSize];
int byteTrans=0;
while(byterans
我试着和里德一起玩,到目前为止,这就是我的工作

我想我记得一个字节最多只能包含255个整数。我想我应该发送一个无符号的短字符串来代替那些大字符串

我的主要问题是:flash actionscript 3也是这样吗? 如果是这样,我如何实现类似的功能

我的想法是在socketData的处理程序中,读取缓冲区大小,然后将所有数据保存到类上的bytearray缓冲区中。如果缓冲区大小是接收到的大小,则运行读取方法。因此,通常,每次调用socketData处理程序时,都在java端的while循环中运行代码


谢谢!

发送数据时,您应该以空字符结束数据包。您可以“刷新”在任何时候,接收端的缓冲区都只是将数据存储在var中,直到读取空字符为止。因此,基本上,您存储数据并将其添加到var中,直到该空字符为止。一旦获得该空字符,您将对其进行处理。inputstream错误是将代码粘贴到此处的错误。我现在只使用带符号的整数,我已经在as3中实现了我的想法。否我不确定它是否适用于更大的数据包,因为我还没有找到测试它的方法。我相信数据包大小最终将由路由器上的MTU设置和最终传输数据的其他网络硬件决定。如果您查看OSI 7层蛋糕(模型),以太网上最大的MTU为1500字节。最终,您的数据将被拆分为此大小的数据包,如果使用TCP发送,则会标记一个序列号,并发送到可能被接收的序列号,然后根据序列号重新缝合。如果不考虑UDP顺序,则以太网标准和MTU仍然适用。对于regar要想使用AS3和Java高效地传输数据,我认为AMF(BlazeDS)确实是一条出路(如果需要使用Externalizable和IExternalizable,您可以在某种程度上进行自定义序列化),如果您需要视频流或音频流解决方案,请查看Red5。如果您只是在尝试了解底层内容的工作原理,请坚持使用Java(同时让Wireshark了解实际情况)。