Java Flash AS3套接字读取较大的数据包+;代码确认
所以我四处阅读,很明显网络将数据包分解成更小的块或其他东西,并分别发送它们,但java不知道应该接收的字节的总大小。我在数据包中添加了一个bytesize前缀,以便它知道要读取多少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 ) {
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了解实际情况)。