服务器端使用Socket对客户端发送数据,服务器端使用DataOutputStream装饰BufferOutputStream,
即new DataOutputStream(new BufferOutputStream(out))来构造输出流
使用输出流的方法writeInt(),writeUTF()等方法将数据写入到缓冲区,然后调用flush()将数据一起发送出去。比如我向客户端传达数据包(int+int+int+boolean)这种形式的数据包,我就使用三次writeInt(),和一次writeBoolean()然后使用flush()将这4个数据一次发送出去。一般来说客户端接受的时候会触发一次数据来到的事件,比如客户端是flash,就会触发一次ProgressEvent.SOCKET_DATA事件。
但是遇到网络阻塞或者其他一些问题。 客户端有可能接受到三个int,boolean没有传送过来,就触发了ProgressEvent.SOCKET_DATA事件,等boolean到来的时候就又触发了一次ProgressEvent.SOCKET_DATA事件。我有没有什么办法让3个int和1个boolean 变成一个数据包,使客户端在接受到3个int以后不会立即触发ProgressEvent.SOCKET_DATA事件,而是等boolean到来,这个数据包完整了以后才触发ProgressEvent.SOCKET_DATA事件?
即new DataOutputStream(new BufferOutputStream(out))来构造输出流
使用输出流的方法writeInt(),writeUTF()等方法将数据写入到缓冲区,然后调用flush()将数据一起发送出去。比如我向客户端传达数据包(int+int+int+boolean)这种形式的数据包,我就使用三次writeInt(),和一次writeBoolean()然后使用flush()将这4个数据一次发送出去。一般来说客户端接受的时候会触发一次数据来到的事件,比如客户端是flash,就会触发一次ProgressEvent.SOCKET_DATA事件。
但是遇到网络阻塞或者其他一些问题。 客户端有可能接受到三个int,boolean没有传送过来,就触发了ProgressEvent.SOCKET_DATA事件,等boolean到来的时候就又触发了一次ProgressEvent.SOCKET_DATA事件。我有没有什么办法让3个int和1个boolean 变成一个数据包,使客户端在接受到3个int以后不会立即触发ProgressEvent.SOCKET_DATA事件,而是等boolean到来,这个数据包完整了以后才触发ProgressEvent.SOCKET_DATA事件?
1 网络延迟和阻塞是不可避免的
2 你所谓的4个一次发出去是不能保证的,因为按照你的问题,只收到了3个。
3 所以,问题的关键不在你怎么发送数据,而在于客户端如何处理收到的数据
4 如果协议好每次都是3个int,+1个boolean,那么客户端在接受时,也要严格按照这个顺序,把已经接受到的保存好,继续接收下一个数据。
接收完4个数据后再进行下一步的操作。 操作完毕,重复前面的操作,继续接收数据。调整你的flash的事件处理逻辑吧!
我先看看有没有更具体的答案,分数一会再给你