Flash Socket 编程(2)

Flash Socket编程(1)

http://blog.csdn.net/hero82748274/archive/2009/02/03/3860895.aspx

现在来写一个flash 客户端,这里要解决的问题包括,

如何连接服务器,

如何监听服务器的内容,

如何发送信息服务器,

现在发一段简单的代码,这个代码很简单,功能不完整,为的是能够清晰一点让我们学习flash socket编程。

我们首先解决第一个问题:(其实在cookbook那里已经有说的)这里简单演示一下

一.连接服务器:

mysocket=new Socket();
mysocket.addEventListener(Event.CONNECT,OnConnect);

mysocket.connect(host,port);

host :是连接的ip端,这里连接本地所以使用localhost 或者127.0.0.1 就ok

port:端口号只有大于1024的时候基本上可以顺利,小于1024还要进行一些配置

监听连接是否成功:

private function OnConnect(e:Event):void
  {
   trace("连接成功");
   mysocket.writeUTFBytes("Test successful2\n");
   mysocket.flush();//发送数据

  }

连接成功后,我们可以发送一个简单信息给服务器:

mysocket.writeUTFBytes("Test successful2\n");
mysocket.flush();//发送数据

注意,有个\n没有这个回车符,看看会有一些什么发生呢。

使用writeUTFBytes 是不可能立刻发送数据给服务器的,还要使用flush方法才能发送给服务器。

二.处理错误:

mysocket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

private function ioErrorHandler(e:IOErrorEvent):void
  {
   trace("连接失败");
  }

三.接收服务器返回的信息

mysocket.addEventListener(ProgressEvent.SOCKET_DATA , receivedata);

private function receivedata(e:ProgressEvent):void
  {
   trace("收到的字节数"+mysocket.bytesAvailable);
   var msg:String;
   while (mysocket.bytesAvailable)
   {
    msg+=mysocket.readMultiByte(mysocket.bytesAvailable,"utf8");
    trace(msg);
   }
  }

这样我们可以接收到服务器发送来的信息,但是存在一个问题,接收数据会存在一个回车符合的问题,需要我们去解决。这里暂时不多说

看上面的

参考:

bytesAvailable : uint

[read-only] 输入缓冲区中可读取的数据的字节数。
readMultiByte(length: uint, charSet: String): String
使用指定的字符集,从该字节流读取一个多字节字符串。
四,发送信息给服务器
 问题:我们希望发送信息给服务器
解决:
使用writeUTFBytes 方法
private function SendData(e:MouseEvent):void
  {
   trace("发送");
   mysocket.writeUTFBytes("i am flash\n");
   mysocket.flush();//发送数据

  }
在场景上放一个按钮上去,通过点击按钮事件,发送信息给服务器socket端口。
参考:
 
将一个 UTF-8 字符串写入套接字。
五:服务器程序
这里写一个简单服务器程序,使用一个简单的线程,不过线程并不完善,有缺点,但不影响程序演示:
接收结果:
等待连接....
连接成功....
获取里面的内容......
内容:Test successful2
内容:i am flash
内容:i am flash
内容:i am flash
内容:i am flash
内容:i am flash
为了让程序更加完善,我们可以将程序修改得更加完善
客户端发送的内容:
连接成功
收到的字节数16
null你好我是服务器
注意:出现null这个结果,也许在服务出现一些小毛笔,但基本发送数据的和接收数据都成功了
程序需要完善的地方:
包括客户端和服务器
处理回车符合问题
最后发现原来在var msg:String="";写上这样null 就不会出现了

你可能感兴趣的:(socket)