AIR 2 UDP socket(2)

  
现在我们了解了UDP的使用,让我们开始建立一个基本的UDP客户端和服务器。我们将使用DatagramSocket 类来发送数据包至指定的端口和指定的地址。我们也会将我们的socket绑定至一个本地端口以让我们直接接收任何进入的数据包。在这样的情况下,我们将会被从一个AIR2客户端发送信息至一个JAVA服务器和用localhost返回(远程地址工作原理一样)。我们的客户端应用程序将通过说"Hello, how are you?"来开始建立通讯。我们的服务器然后将以"I'm quite well, thank you"来回复。
关于socket安全的一个小提示。当在应用沙箱外部处理socket连接的时候,这时候需要一个cross-domain (越界政策)。我们将在应用内部沙箱内工作,在这里我们就没有同样的约束,但是需要知道这时候如果和非AIR之外的socket工作时需要做额外的工作。
在我们的AIR应用中,首先要做的是做一个新的datagramSocket 和帮顶它至一个地址和一个端口以接收数据包。
程序代码 程序代码

private var datagramSocket:DatagramSocket = new DatagramSocket();
protected function creationCompleteHandler(event:FlexEvent) : void {
       datagramSocket.bind(4455, "127.0.0.1");
}


通过这一步我们将socket和在127.0.0.1(localhost)上的端口4455绑定。 你将要确保端口是否已经被另一个应用使用,否则将会报错。对于我们的例子,我是任意的为我们的客户端和服务端选择的端口"4455" 和 "4456"以用来来回通讯 。由于客户端和服务端在同一个机器上,所以我们需要使用不同的端口号,但是当你用两个远程系统处理的时候,这些号码可以被识别出来。
走到这步,我们基本上已经准备好接收任何发送到我们应用的这个端口的数据。这里还有另一步:使用DatagramSocket.receive()来激活接收数据。我们想要在投线后稍后激活这个,所以现在我们连接有效载荷。进入的数据是以ByteArray 的个是进入的,是以DatagramSocketDataEvent事件连接的。
程序代码 程序代码

datagramSocket.addEventListener(DatagramSocketDataEvent.DATA, dataHandler)

当然,在发生任何错误的时候你都要处理I/O和安全错误。这个和处理Socket和XMLSocket类一样。
程序代码 程序代码

private var datagramSocket:DatagramSocket = new DatagramSocket();
protected function creationCompleteHandler(event:FlexEvent) : void {
       datagramSocket.addEventListener(DatagramSocketDataEvent.DATA, dataHandler)
       datagramSocket.addEventListener(IOErrorEvent.IO_ERROR, IOErrorHandler);
       datagramSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
       datagramSocket.bind(4455, "127.0.0.1");
}

自然的,一旦数据进来我们就想利用他们做些事情。你如何处理数据将取决与你发送的数据。在此案中,我们需要的是从服务端收到一个UTF-8编码的字符串,所以我们可以使用ByteArray.readUTFBytes()方法来转换我们的数据包为一个字符串和输出它的值。
程序代码 程序代码

private function dataHandler(event:DatagramSocketDataEvent) : void {
       trace( event.data.readUTFBytes(event.data.length) );
}

现在,我们已经准备接收数据,那我们来发送一些数据到服务器以生成一个回应。首先我们创建一个数据包(aka, 一个ByteArray)然后写些数据到里面去。
程序代码 程序代码

var packet:ByteArray = new ByteArray();
packet.writeUTFBytes("Hello, how are you?");

现在我们可以使用datagramSocket.send()方法来发送次数据包。你需要指定待发送地址和端口。让我们把这个数据包发给127.0.0.1的端口4455。
程序代码 程序代码

protected function clickHandler(event:MouseEvent) : void {
       var packet:ByteArray = new ByteArray();
       packet.writeUTFBytes("Hello, how are you?");
       datagramSocket.send(packet, 0, 0, "127.0.0.1", 4455);
       datagramSocket.receive()
}

现在我们已经发出一个数据包,我们现在等待接收到一个回应。 你将会注意到datagramSocket.receive()在发送数据包之后马上就被调用。回复被接收到和处理,最好关闭连接,除非你要处理一个持续的数据流。可以用DatagramSocket.close()方法关闭连接。一旦我们接收到想要的数据,我们就立即在我们的操作器中关闭连接。
程序代码 程序代码

private function dataHandler(event:DatagramSocketDataEvent) : void {
       trace( event.data.readUTFBytes(event.data.length) );
       datagramSocket.close();                                
}

以上已经教会大家如何在我们的UDPsocket上设置来发送和接收数据。在第三部分,我们将涉足如何给我们的客户端写Java UDP socekt服务器进行通讯。





文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 0 | 引用: 0 | 查看次数: 470
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭