分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
Flash Socket编程(1)
http://blog.youkuaiyun.com/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);
}
}
这样我们可以接收到服务器发送来的信息,但是存在一个问题,接收数据会存在一个回车符合的问题,需要我们去解决。这里暂时不多说
看上面的
参考:
{
trace("发送");
mysocket.writeUTFBytes("i am flash/n");
mysocket.flush();//发送数据
}
将一个 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你好我是服务器
给我老师的人工智能教程打call!http://blog.youkuaiyun.com/jiangjunshow
