Flash Socket 编程(2)

               

Flash Socket编程(1)

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

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

如何连接服务器,

如何监听服务器的内容,

如何发送信息服务器,

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

package { import flash.net.Socket; import flash.events.*; import flash.display.Sprite; import flash.errors.*; import flash.display.SimpleButton; public class Client extends Sprite {  private var mysocket:Socket;  private var host:String="localhost";  private var port:int=8001;  public function Client()  {   btn.addEventListener(MouseEvent.CLICK,SendData);   mysocket=new Socket();   mysocket.addEventListener(Event.CONNECT,OnConnect);   mysocket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);   mysocket.addEventListener(ProgressEvent.SOCKET_DATA , receivedata);   //mysocket.addEventListener(SecurityError   mysocket.connect(host,port);  }  private function OnConnect(e:Event):void  {   trace("连接成功");   mysocket.writeUTFBytes("Test successful2/n");   mysocket.flush();//发送数据  }  private function ioErrorHandler(e:IOErrorEvent):void  {   trace("连接失败");  }  private function receivedata(e:ProgressEvent):void  {   trace("收到的字节数"+mysocket.bytesAvailable);   var msg:String;   while (mysocket.bytesAvailable)   {    msg+=mysocket.readMultiByte(mysocket.bytesAvailable,"utf8");    trace(msg);   }  }  private function SendData(e:MouseEvent):void  {   trace("发送");   mysocket.writeUTFBytes("i am flash/n");   mysocket.flush();//发送数据  } }}

我们首先解决第一个问题:(其实在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 字符串写入套接字。
五:服务器程序
这里写一个简单服务器程序,使用一个简单的线程,不过线程并不完善,有缺点,但不影响程序演示:
package com;import java.net.*;import java.io.*;public class Server implements Runnable {     public void run() {   PrintWriter os=null;   try{   ServerSocket ss=new ServerSocket(8001);   System.out.println("等待连接....");   Socket sk=ss.accept();   System.out.println("连接成功....");   BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream(),"utf-8"));       System.out.println("获取里面的内容......");       //等待接受信息          os = new PrintWriter(sk.getOutputStream());       String word=null ;    //发送信息     while((word=br.readLine())!=null)    {           System.out.println("内容:" + word);     os.println("你好我是服务器");      os.flush();     }  }   catch(IOException ex)   {    ex.printStackTrace();       }   }  public static void main(String[] args) {   new Thread(new Server()).start(); }}
接收结果:
等待连接....
连接成功....
获取里面的内容......
内容:Test successful2
内容:i am flash
内容:i am flash
内容:i am flash
内容:i am flash
内容:i am flash
为了让程序更加完善,我们可以将程序修改得更加完善
客户端发送的内容:
连接成功
收到的字节数16
null你好我是服务器
注意:出现null这个结果,也许在服务出现一些小毛笔,但基本发送数据的和接收数据都成功了
程序需要完善的地方:
包括客户端和服务器
处理回车符合问题
最后发现原来在var msg:String="";写上这样null 就不会出现了
           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/cfhgcvb/article/details/87461277