flex与JAVA的SOCKET通信.docx

上传人:b****0 文档编号:12472691 上传时间:2023-04-19 格式:DOCX 页数:16 大小:41.27KB
下载 相关 举报
flex与JAVA的SOCKET通信.docx_第1页
第1页 / 共16页
flex与JAVA的SOCKET通信.docx_第2页
第2页 / 共16页
flex与JAVA的SOCKET通信.docx_第3页
第3页 / 共16页
flex与JAVA的SOCKET通信.docx_第4页
第4页 / 共16页
flex与JAVA的SOCKET通信.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

flex与JAVA的SOCKET通信.docx

《flex与JAVA的SOCKET通信.docx》由会员分享,可在线阅读,更多相关《flex与JAVA的SOCKET通信.docx(16页珍藏版)》请在冰豆网上搜索。

flex与JAVA的SOCKET通信.docx

flex与JAVA的SOCKET通信

flex与JAVA的SOCKET通信

一、准备:

服务端:

JDK1.5(这个不用介绍了吧?

服务端IDE:

eclipse(它的主页)

客户端:

FLEX3(Adobe®Flex®3是用于构建和维护在所有主要浏览器、桌面和操作系统一致地部署的极具表现力的Web应用程序的高效率的开放源码框架。

客户端IDE:

FlexBuilder3(它的官方摘要页)

二、缘分的相遇(建立连接):

既然是通信,当然第一步就是要建立连接啦。

我们还是用最简单的看代码的方式来开始我们的连接。

==========================================

==服务端代码:

Jserver1.java

==========================================

1.

2.import.*;

3.importjava.io.*;

4.publicclassJserver1{

5.publicstaticvoidmain(String[]args){

6.ServerSocketserver=null;

7.try{

8.  server=newServerSocket(719);//在端口719建立一个服务器套接字对象

9.  System.out.println("服务端等待");

10.  while(true){

11.  System.out.println("等待客户机");

12.  SocketnewSocket=server.accept();//客户端向我们建立的服务器套接字发送连接请求,则向下执行

13.  System.out.println("已与客户机连接");

14.  }

15.}catch(IOExceptionie)

16.{

17.  System.out.println(ie);

18.}finally{

19.  try

20.  {

21.  if(server!

=null)server.close();//关闭服务器套接字。

为什么要用finally关键字来做这个事呢?

HOHOthinkinginjava里大师已经说得很清楚了,就是无论出现什么异常,都保证我们的服务端套接字能被关闭。

22.  }catch(IOExceptionie){}

23.}

24.}

复制代码

嘎嘎,怎么样注释写得够清楚了吧?

OK让我们编译运行,得到的结果应该如图:

 

OK再让我们来看看客户端的代码是怎么样的:

==========================================

==客户端代码:

Jclient1.mxml

===================================================

1.

2.

xmlversion="1.0"encoding="utf-8"?

>

3.

Applicationxmlns:

mx="layout="absolute"creatifwidth="349"height="326">

4.

Script>

5.  

[CDATA[

6.  import.Socket;

7.  privatevarsocket:

Socket;

8.  internalfunctioninitApp():

void

9.  {

10.  socket=newSocket();//创建Socket对象

11.  socket.connect("localhost",719);  //连接服务器

12.  socket.addEventListener(Event.CONNECT,connectFun);//监听是否连接上服务器

13.  socket.addEventListener(Event.CLOSE,closeFun);//监听套接字连接是否关闭

14.  

15.  }

16.  privatefunctionconnectFun(event:

Event):

void

17.  {

18.  jText.text+="已经成功连接到服务器!

\n";

19.  }

20.

21.  privatefunctioncloseFun(event:

Event):

void

22.  {

23.  jText.text+="和服务器断开!

\n"

24.  }

25.  ]]>

26.

Script>

27.

TextAreax="10"y="10"width="327"height="309"id="jText"/>

28.

Application>

复制代码

界面非常简单啦,其实就是一个TextArea来显示连接的结果而已,运行的结果如下图(注意,服务端也应该在运行!

):

 

在as3.0中,所有和网络通信有关的类都位于包中,这里使用的是Socket类对象。

==========================================

==我们来详细说明一下上面用到的Socket类:

==========================================

Socket对象的常用创建方法有下面2种:

1.

2.varsocket:

Socket=newSocket();//例一

复制代码

或者

1.varsocket:

Socket=newSocket("localhost",719);//例二.这条语句设置了服务器地址为localhost端口是719

复制代码

当指定了了服务器地址和端口,Socket对象将自动开始连接服务器。

如果不指定,则需要条用connect方法才开始执行连接动作,意思就是,例二的代码和下面的代码是等效的:

1.

2.varsocket:

Socket=newSocket();

3.socket.connect("localhost",719);

复制代码

完成连接动作后,接下来要获取服务端得返回信息。

Socket对象和URLLOADER啊之类的对象都是一样,利用事件机制来处理服务器端的信息,我们只要给Socket对象添加相关的事件监听函数就可以捕捉到服务器端的信息,Socket对象的事件主要有:

1 Event.CLOSE 连接中断事件。

2 Event.CONNECT连接状态事件,表示已经成功连接了服务器。

3 IOErrorEvent.IO_ERROR 信息传递错误事件,一般是由服务器地址错误引起的。

4 ProgressEvent.SOCKET_DATA 服务器信息事件,当收到服务器的新信息时被触发。

==========================================

哈哈,经过上面的代码,我们的服务端MM和客户端GG终于通过Socket这个缘分宿命的相遇了!

接下来会发生什么?

我们继续往下看~~

三、第一封情书(客户端发送消息,服务端接受消息)

客户端GG在遇到服务端MM以后,终日变得茶饭不思,在折磨掉了无数根头发以后,客户端GG终于下定决心,要向服务端MM送出第一封情书啦!

既然是客户端GG送出情书,那我们先来看他到底是怎么做的:

==========================================

==客户端代码:

Jclient2.mxml

==========================================

1.

xmlversion="1.0"encoding="utf-8"?

>

2.

Applicationxmlns:

mx="layout="absolute"fontSize="12"creationComplete="initApp()">

3.

Script>

4.

[CDATA[

5.import.Socket;

6.importflash.utils.ByteArray;

7.

8.privatevarsocket:

Socket=newSocket(); //定义Socket,准备好情书的信封

9.//初始化程序

10.internalfunctioninitApp():

void

11.{

12.socket.connect("localhost",719);//连接服务器

13.socket.addEventListener(Event.CONNECT,funConnect);//监听是否连接

14.socket.addEventListener(Event.CLOSE,funClose);//监听连接关闭

15.}

16.internalfunctionfunConnect(event:

Event):

void

17.{

18.myText.text+="连接已建立\n";

19.}

20.internalfunctionfunClose(event:

Event):

void

21.{

22.myText.text+="连接已关闭\n";

23.}

24.

25.internalfunctionsendMessage(msg:

String):

void//发送数据对应按钮click事件

26.{

27.varmessage:

ByteArray=newByteArray();//新建一个ByteArray存放数据

28.message.writeUTFBytes(msg+"\r\n");//写入数据,writeUTFBytes方法,以utf-8格式传数据避免中文乱码

29.socket.writeBytes(message); //写入Socket的缓冲区

30.socket.flush();  //调用flush方法发送信息

31.myText.text+=msg+"\r\n";  //在客户端屏幕上输出发送的内容

32.myInput.text="";//清空发言框

33.}

34.]]>

35.

Script>

36.

TextAreax="10"y="10"width="703"height="263"id="loveText"/>

37.

TextInputx="10"y="297"width="605"id="loveInput"/>

38.

Buttonx="648"y="297"label="发送情书"id="sendBtn"click="sendMessage(loveInput.text)"/>

39.

Application>

复制代码

嘎嘎,情书的做法就上面那面简单,注释已经写得很清楚了,就不多说了。

OK,客户端GG的情书倒是送出去了,我们就来看看服务端MM是怎么接受这封情书的呢?

==========================================

==服务端代码:

Jserver2.java

==========================================

1.import.*;

2.importjava.io.*;

3.publicclassJserver2{

4.privateBufferedReaderreader; //负责输入

5.privateServerSocketserver;  //服务器套接字

6.privateSocketsocket;     //套接字

7.publicServer2(){}  //缺省构造函数

8.voidstartServer()  //启动服务器

9.{

10.try

11.{

12.server=newServerSocket(719);   //创建服务器套接字

13.System.out.println("服务器套接字建立完毕");

14.while(true)

15.{

16.  System.out.println("等待客户端GG");

17.  socket=server.accept(); //若客户端GG提出连接请求,与socket连接

18.  System.out.println("完成与客户端的连接");

19.reader=newBufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));//获取socket输入流,“utf-8”这个编码设置是为了更好显示中文 

20.getMessage();//读取来自客户端的数据,并输出至画面上

21.}

22.}catch(Exceptione)

23.{

24.System.out.println(e);

25.}finally{

26.try

27.{

28.if(server!

=null)server.close();//关闭服务器套接字。

29.}catch(IOExceptionie){}

30.}

31.}

32.voidgetMessage()  //读取来自套接字的信息

33.{

34.try

35.{

36.while(true)   //循环

37.{

38.System.out.println("客户端GG说:

"+reader.readLine());

39.}

40.}catch(Exceptione){}

41.finally{

42.System.out.println("客户端中断连接");

43.try

44.{

45.if(reader!

=null)reader.close(); //关闭套接字的输入流

46.if(socket!

=null)socket.close();  //关闭套接字

47.reader=null;

48.socket=null;

49.}catch(Exceptione){}

50.}

51.}

52.publicstaticvoidmain(String[]args)

53.{

54.Server2server=newServer2();

55.server.startServer();

56.}

57.

58.}

复制代码

哈哈,我们运行来看看,我们的客户端GG的情书能否顺利到达服务端MM的手中呢?

运行结果如下:

 

HOHO看样子我们的客户端GG的情书,服务端MM是顺利接受到啦。

四、服务端MM的心思(多客户端通信)

在服务端MM收到客户端GG的情书以后,突然发现自己原来还是蛮受欢迎的呢。

但是有句俗话说的好,那就是“不能为了一棵树放弃一片森林”。

所以服务端MM就想,能不能多接受几个客户端GG的情书呢?

(真TMD贱。

OK,既然服务端MM有了这个需求(虽然是很贱的需求),那我们就要来满足她!

来看服务端的代码:

=========================================

==Jserver3.java

=========================================

1.import.*;

2.importjava.io.*;

3.importjava.util.*;

4.

5.publicclassJserver3{

6.privateServerSocketserver;

7.ListsManager=newArrayList();

8.

9.publicJserver3(){}

10.voidstartServer() //运行服务器

11.{

12.try

{

13.server=newServerSocket(719);

14.System.out.println("服务器套接字已创建成功!

");

15.while(true)

16.{

17.Socketsocket=server.accept();

18.System.out.println("已经与客户端连接");

19.newJ_Thread(socket).start();

20.sManager.add(socket);

21.System.out.println("当前客户端连结数:

"+sManager.size());

22.}

23.}catch(Exceptione){}finally

24.{

25.try

26.{

27.server.close();

28.}catch(Exceptione){}

29.}

30.}

31.publicstaticvoidmain(String[]args){

32.

33.Jserver3server=newJserver3();

34.server.startServer();

35.}

36.classJ_ThreadextendsThread  //与客户端进行通信的线程类

37.{

38.Socketsocket;  //套接字引用变量

39.privateDataInputStreamreader;  //套接字输入流

40.privateDataOutputStreamwriter; //套接字输出流

41.J_Thread(Socketsocket)  //构造函数

42.{

43.this.socket=socket;

44.}

45.publicvoidrun()

46.{

47.try

48.{

49.

50.reader=newDataInputStream(socket.getInputStream());//获取套接字的输入流

51.writer=newDataOutputStream(socket.getOutputStream());//获取套接字的输出流

52.Stringmsg;

53.while((msg=reader.readUTF())!

=null)//如果收到客户端发来的数据

54.{

55.//向客户端发送信息

56.writer.writeUTF("您的情书已经收到");

57.writer.flush();

58.System.out.println("来自客户端:

"+msg);

59.

60.}

61.}catch(Exceptione){}finally

62.{

63.try

64.{

65.sManager.remove(socket); //删除套接字

66.//关闭输入输出流及套接字

67.if(reader!

=null)reader.close();

68.if(writer!

=null)writer.close();

69.if(socket!

=null)socket.close();

70.reader=null;

71.writer=null;

72.socket=null;

73.

74.System.out.println("客户端离开");//向屏幕输出相关信息

75.System.out.println("当前客户端的连接数:

"+sManager.size());

76.}catch(Exceptione){}

77.}

78.}

79.}

80.

81.}

复制代码

嘎嘎在这段代码里,服务端MM为每一个连接的客户端GG分配一个单独的线程,而每一个线程里都持有对应的客户端GG的Socket对象。

SO,通过这些多线程,服务端MM就练就了一心N用的功力,可以同时接受N个客户端GG发来的情书了(

 ,真的太贱了。

客户端的代码和上面的客户端代码一模一样的,这里就不多说啦!

好了,在这里就简单的给大家介绍了如何实现java和flash(flex)实现socket通信的简单功能。

有时间的话,再给大家来个简单的聊天室实现(那个时候的服务端MM就更贱了,不仅收着N多客户端GG的情书,竟然还把情书广播给所有的客户端GG,BS!

)。

嘎嘎其实原理就是上面所说的这些,大家自己都可以尝试下。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1