ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>色婷婷av一区二区三区软件,福利成人在线观看,91欧美在线视频http://www.aygfsteel.com/jjshcc/category/46362.htmlzh-cnMon, 20 Sep 2010 07:48:15 GMTMon, 20 Sep 2010 07:48:15 GMT60flex与JAVAçš„SOCKET通信http://www.aygfsteel.com/jjshcc/archive/2010/09/19/332424.htmlEric_jiangEric_jiangSun, 19 Sep 2010 04:33:00 GMThttp://www.aygfsteel.com/jjshcc/archive/2010/09/19/332424.htmlhttp://www.aygfsteel.com/jjshcc/comments/332424.htmlhttp://www.aygfsteel.com/jjshcc/archive/2010/09/19/332424.html#Feedback0http://www.aygfsteel.com/jjshcc/comments/commentRss/332424.htmlhttp://www.aygfsteel.com/jjshcc/services/trackbacks/332424.html建立˜qžæŽ¥
既然是通信åQŒå½“然第一步就是要建立˜qžæŽ¥å•¦ã€‚我们还是用最½Ž€å•的看代码的方式来开始我们的˜qžæŽ¥ã€?/p>

==========================================
==服务端代码:Jserver1.java
==========================================

import java.net.*;
import java.io.*;
public class Jserver1 {
public static void main(String[] args) {
ServerSocket server=null;
try{
   server=new ServerSocket(719);//在端å?19建立一个服务器套接字对è±?br />   System.out.println("服务端等å¾?);
  while(true){
   System.out.println("½{‰å¾…客户æœ?);
   Socket newSocket=server.accept();//客户端向我们建立的服务器套接字发送连接请æ±?则向下执è¡?br />    System.out.println("å·²ä¸Žå®¢æˆ·æœø™¿žæŽ?);
  }
}catch(IOException ie)
{
  System.out.println(ie);
}finally{
  try
  {
   if(server!=null) server.close();//å…³é—­æœåŠ¡å™¨å¥—æŽ¥å­—ã€‚äØ“ä»€ä¹ˆè¦ç”¨finally关键字来做这个事呢?HOHO thinking in java里大师已¾lè¯´å¾—很清楚了,ž®±æ˜¯æ— è®ºå‡ºçŽ°ä»€ä¹ˆå¼‚å¸¸ï¼Œéƒ½ä¿è¯æˆ‘ä»¬çš„æœåŠ¡ç«¯å¥—æŽ¥å­—èƒ½è¢«å…³é—­ã€?br />   }catch(IOException ie){}
}
}
 å˜Žå˜ŽåQŒæ€Žä¹ˆæ ?注释写得够清楚了吧?OK 让我们编译运行,得到的结果应该如图:

OK 再让我们来看看客æˆïL«¯çš„代码是怎么æ ïLš„åQ?br /> ==========================================
==客户端代码:Jclient1.mxml
===================================================


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creati f width="349" height="326">
<mx:Script>
  <![CDATA[
  import flash.net.Socket;
  private var socket:Socket;
  internal function initApp():void
  {
   socket=new Socket();//创徏Socket对象
   socket.connect("localhost",719);  //˜qžæŽ¥æœåŠ¡å™?br />    socket.addEventListener(Event.CONNECT,connectFun);//监听是否˜qžæŽ¥ä¸ŠæœåС噍
   socket.addEventListener(Event.CLOSE,closeFun);//监听套接字连接是否关é—?br />   }
  private function connectFun(event:Event):void
  {
   jText.text+="已经成功˜qžæŽ¥åˆ°æœåС噍åQ\n";
  }

  private function closeFun(event:Event):void
  {
   jText.text+="和服务器断开!\n"
  }
  ]]>
</mx:Script>
<mx:TextArea x="10" y="10" width="327" height="309" id="jText"/>
</mx:Application>

界面非常½Ž€å•啦åQŒå…¶å®žå°±æ˜¯ä¸€ä¸ªTextArea来显½Cø™¿žæŽ¥çš„¾l“果而已åQŒè¿è¡Œçš„¾l“果如下图(注意åQŒæœåŠ¡ç«¯ä¹Ÿåº”è¯¥åœ¨˜qè¡ŒåQï¼‰åQ?/p>

在as3.0ä¸?所有和¾|‘络通信有关的类都位于flash.net包中åQŒè¿™é‡Œä‹É用的是Socket¾cÕd¯¹è±¡ã€?br /> ==========================================
==我们来详¾l†è¯´æ˜Žä¸€ä¸‹ä¸Šé¢ç”¨åˆ°çš„Socket¾c»ï¼š
==========================================

Socket对象的常用创建方法有下面2¿Uï¼š
var socket:Socket=new Socket();//例一
或è€?br /> var socket:Socket=new Socket("localhost",719);//例二.˜q™æ¡è¯­å¥è®„¡½®äº†æœåŠ¡å™¨åœ°å€ä¸ºlocalhost 端口æ˜?19

当指定了了服务器地址和端口,Socket对象ž®†è‡ªåŠ¨å¼€å§‹è¿žæŽ¥æœåŠ¡å™¨ã€‚å¦‚æžœä¸æŒ‡å®šåQŒåˆ™éœ€è¦æ¡ç”¨connectæ–ÒŽ³•才开始执行连接动作,意思就æ˜?例二的代码和下面的代码是½{‰æ•ˆçš„:

var socket:Socket=new Socket();
socket.connect("localhost",719);
完成˜qžæŽ¥åŠ¨ä½œåŽï¼ŒæŽ¥ä¸‹æ¥è¦èŽ·å–æœåŠ¡ç«¯å¾—˜q”回信息ã€?br /> Socket对象和URLLOADER啊之¾cȝš„å¯¹è±¡éƒ½æ˜¯ä¸€æ øP¼Œåˆ©ç”¨äº‹äšg机制来处理服务器端的信息åQŒæˆ‘们只要给Socket对象æ·ÕdŠ ç›¸å…³çš„äº‹ä»¶ç›‘å¬å‡½æ•°å°±å¯ä»¥æ•æ‰åˆ°æœåŠ¡å™¨ç«¯çš„ä¿¡æ¯åQŒSocket对象的事件主要有åQ?br /> åQ‘ Event.CLOSE ˜qžæŽ¥ä¸­æ–­äº‹äšgã€?br /> åQ’ Event.CONNECT ˜qžæŽ¥çŠ¶æ€äº‹ä»Óž¼Œè¡¨ç¤ºå·²ç»æˆåŠŸ˜qžæŽ¥äº†æœåС噍ã€?br /> åQ“ IOErrorEvent.IO_ERROR 信息传递错误事ä»Óž¼Œä¸€èˆ¬æ˜¯ç”±æœåŠ¡å™¨åœ°å€é”™è¯¯å¼•è“vçš„ã€?br /> åQ” ProgressEvent.SOCKET_DATA 服务器信息事ä»Óž¼Œå½“收到服务器的新信息时被触发ã€?/p>

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

哈哈åQŒç»˜q‡ä¸Šé¢çš„代码åQŒæˆ‘们的服务端MM和客æˆïL«¯GG¾lˆäºŽé€šè¿‡Socket˜q™ä¸ª¾~˜åˆ†å®¿å‘½çš„相遇了åQæŽ¥ä¸‹æ¥ä¼šå‘生什么?我们¾l§ç®‹å¾€ä¸‹çœ‹~~
三、第一ž®æƒ…书(客户端发送消息,服务端接受消息)

 

客户端GG在遇到服务端MM以后åQŒç»ˆæ—¥å˜å¾—茶饭不思,在折¼‚¨æŽ‰äº†æ— æ•°æ ¹å¤´å‘以后åQŒå®¢æˆïL«¯GG¾lˆäºŽä¸‹å®šå†›_¿ƒåQŒè¦å‘服务端MM送出½W¬ä¸€ž®æƒ…书啦åQ?/p>

既然是客æˆïL«¯GG送出情书åQŒé‚£æˆ‘们先来看他到底是怎么做的åQ?br /> ==========================================
==客户端代码:Jclient2.mxml
==========================================

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="initApp()">
<mx:Script>
<![CDATA[
import flash.net.Socket;
import flash.utils.ByteArray;

private var socket:Socket=new Socket(); //定义Socket,准备好情书的信封
//初始化程�br /> internal function initApp():void
{
socket.connect("localhost",719); //˜qžæŽ¥æœåŠ¡å™?br /> socket.addEventListener(Event.CONNECT,funConnect); //监听是否˜qžæŽ¥
socket.addEventListener(Event.CLOSE,funClose); //监听˜qžæŽ¥å…³é—­
}
internal function funConnect(event:Event):void
{
myText.text+="˜qžæŽ¥å·²å¾ç«?\n";
}
internal function funClose(event:Event):void
{
myText.text+="˜qžæŽ¥å·²å…³é—?\n";
}

internal function sendMessage(msg:String):void//发送数据对应按钮click事äšg
{
var message:ByteArray=new ByteArray();//新徏一个ByteArray存放数据
message.writeUTFBytes(msg +"\r\n");//写入数据åQŒwriteUTFBytesæ–ÒŽ³•åQŒä»¥utf-8æ ¼å¼ä¼ æ•°æ®é¿å…ä¸­æ–‡äØ•ç ?br /> socket.writeBytes(message);  //写入Socket的缓冲区
socket.flush();  //调用flushæ–ÒŽ³•发送信æ?br /> myText.text+=msg+"\r\n";  //在客æˆïL«¯å±å¹•上输出发送的内容
myInput.text=""; //清空发言�br /> }
]]>
</mx:Script>
<mx:TextArea x="10" y="10" width="703" height="263" id="loveText"/>
<mx:TextInput x="10" y="297" width="605" id="loveInput"/>
<mx:Button x="648" y="297" label="发送情� id="sendBtn" click="sendMessage(loveInput.text)"/>
</mx:Application>

嘎嘎åQŒæƒ…书的做法ž®×ƒ¸Šé¢é‚£é¢ç®€å•,注释已经写得很清楚了åQŒå°±ä¸å¤šè¯´äº†ã€?/p>

OKåQŒå®¢æˆïL«¯GG的情书倒是送出åŽÖMº†åQŒæˆ‘们就来看看服务端MM是怎么接受˜q™å°æƒ…书的呢åQ?/p>


OKåQŒå®¢æˆïL«¯GG的情书倒是送出åŽÖMº†åQŒæˆ‘们就来看看服务端MM是怎么接受˜q™å°æƒ…书的呢åQ?br /> ==========================================
==服务端代码:Jserver2.java
==========================================

import java.net.*;
import java.io.*;
public class Jserver2{
private BufferedReader reader; //负责输入
private ServerSocket server;   //服务器套接字
private Socket socket;      //套接å­?br /> public Server2(){}  //¾~ºçœæž„造函æ•?br /> void startServer()  //启动服务å™?br /> {
try
{
server=new ServerSocket(719);    //创徏服务器套接字
System.out.println("服务器套接字建立完毕");
while(true)
{
  System.out.println("½{‰å¾…客户端GG");
  socket=server.accept(); //若客æˆïL«¯GG提出˜qžæŽ¥è¯äh±‚åQŒä¸Žsocket˜qžæŽ¥
  System.out.println("完成与客æˆïL«¯çš„连æŽ?);
reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); //获取socket输入‹¹ï¼Œ“utf-8”˜q™ä¸ª¾~–码讄¡½®æ˜¯äؓ了更好显½CÞZ¸­æ–?
getMessage();//è¯Õd–来自客户端的数据åQŒåƈ输出至画面上
}
}catch(Exception e)
{
System.out.println(e);
}finally{
try
{
if(server!=null) server.close();//关闭服务器套接字�br /> }catch(IOException ie){}
}
}
void getMessage()  //è¯Õd–来自套接字的信息
{
try
{
while(true)    //循环
{
System.out.println("客户端GGè¯ß_¼š"+reader.readLine());
}
}catch(Exception e){}
finally{
System.out.println("客户端中断连�);
try
{
if(reader!=null) reader.close(); //关闭套接字的输入‹¹?br /> if(socket!=null) socket.close();  //关闭套接å­?br /> reader=null;
socket=null;
}catch(Exception e){}
}
}
public static void main(String[] args)
{
Server2 server=new Server2();
server.startServer();
}

}

哈哈åQŒæˆ‘们运行来看看åQŒæˆ‘们的客户端GG的情书能否顺利到达服务端MM的手中呢åQ?br /> ˜qè¡Œ¾l“果如下åQ?/p>


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

 

四、服务端MM的心思(多客æˆïL«¯é€šä¿¡åQ?/p>


在服务端MM收到客户端GG的情书以后,½Hç„¶å‘现自己原来˜q˜æ˜¯è›®å—‹Æ¢è¿Žçš„呢。但是有句俗话说的好åQŒé‚£ž®±æ˜¯“不能ä¸ÞZº†ä¸€‹‚‰| ‘攑ּƒä¸€ç‰‡æ£®æž?#8221;。所以服务端MMž®±æƒ³åQŒèƒ½ä¸èƒ½å¤šæŽ¥å—几个客æˆïL«¯GG的情书呢åQŸï¼ˆçœŸTMD贱。。。)

OKåQŒæ—¢ç„¶æœåŠ¡ç«¯MM有了˜q™ä¸ªéœ€æ±‚(虽然是很è´Þqš„需求)åQŒé‚£æˆ‘们ž®Þp¦æ¥æ»¡­‘›_¥¹åQ?/p>

来看服务端的代码:
=========================================
==Jserver3.java
=========================================

 

import java.net.*;
import java.io.*;
import java.util.*;

public class Jserver3 {
private ServerSocket server;
List sManager = new ArrayList();

public Jserver3(){}
void startServer() //˜qè¡ŒæœåŠ¡å™?br /> {
try
{
server=new ServerSocket(719);
System.out.println("服务器套接字已创建成功!");
while(true)
{
Socket socket=server.accept();
System.out.println("已经与客æˆïL«¯˜qžæŽ¥");
new J_Thread(socket).start();
sManager.add(socket);
System.out.println("当前客户端连¾l“æ•°åQ?+sManager.size());
}
}catch(Exception e){}finally
{
try
{
server.close();
}catch(Exception e){}
}
}
public static void main(String[] args) {

Jserver3 server=new Jserver3();
server.startServer();
}
class J_Thread extends Thread  //与客æˆïL«¯˜q›è¡Œé€šä¿¡çš„线½E‹ç±»
{
Socket socket;   //套接字引用变�br /> private DataInputStream reader;   //套接字输入流
private DataOutputStream writer;  //套接字输出流
J_Thread(Socket socket)   //构造函�br /> {
this.socket=socket;
}
public void run()
{
try
{

reader=new DataInputStream(socket.getInputStream());//获取套接字的输入‹¹?br /> writer=new DataOutputStream(socket.getOutputStream());//获取套接字的输出‹¹?br /> String msg;
while((msg=reader.readUTF())!=null)//如果收到客户端发来的数据
{
//向客æˆïL«¯å‘送信æ?br /> writer.writeUTF("您的情书已经收到");
writer.flush();
System.out.println("来自客户端:"+msg);

}
}catch(Exception e){}finally
{
try
{
sManager.remove(socket);  //删除套接å­?br /> //关闭输入输出‹¹åŠå¥—接å­?br /> if(reader!=null)reader.close();
if(writer!=null)writer.close();
if(socket!=null)socket.close();
reader=null;
writer=null;
socket=null;

System.out.println("客户端离开");//向屏òq•输出相关信æ?br /> System.out.println("当前客户端的˜qžæŽ¥æ•ŽÍ¼š"+sManager.size());
}catch(Exception e){}
}
}
}

}

嘎嘎 在这ŒDµä»£ç é‡ŒåQŒæœåŠ¡ç«¯MM为每一个连接的客户端GG分配一个单独的¾U¿ç¨‹åQŒè€Œæ¯ä¸€ä¸ªçº¿½E‹é‡Œéƒ½æŒæœ‰å¯¹åº”的客户端GGçš„Socket对象。SOåQŒé€šè¿‡˜q™äº›å¤šçº¿½E‹ï¼ŒæœåŠ¡ç«¯MMž®Þq»ƒž®×ƒº†ä¸€å¿ƒN用的功力åQŒå¯ä»¥åŒæ—¶æŽ¥å—N个客æˆïL«¯GG发来的情书了åQ?åQŒçœŸçš„太è´×ƒº†ã€‚。。。)

客户端的代码和上面的客户端代码一模一æ ïLš„åQŒè¿™é‡Œå°±ä¸å¤šè¯´å•¦åQ?/p>

 


好了åQŒåœ¨˜q™é‡Œž®Þq®€å•çš„¾l™å¤§å®¶ä»‹¾läº†å¦‚何实现javaå’ŒflashåQˆflexåQ‰å®žçްsocket通信的简单功能。有旉™—´çš„话åQŒå†¾l™å¤§å®¶æ¥ä¸ªç®€å•的聊天室实玎ͼˆé‚£ä¸ªæ—¶å€™çš„æœåŠ¡ç«¯MMž®±æ›´è´×ƒº†åQŒä¸ä»…收着N多客æˆïL«¯GG的情书,竟然˜q˜æŠŠæƒ…书òq¿æ’­¾l™æ‰€æœ‰çš„客户端GGåQŒBSåQï¼‰ã€‚嘎å˜?其实原理ž®±æ˜¯ä¸Šé¢æ‰€è¯´çš„˜q™äº›åQŒå¤§å®¶è‡ªå·±éƒ½å¯ä»¥ž®è¯•下ã€?/p>

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÀèÆ½ÏØ| ºâÉ½ÏØ| ÐÏÌ¨ÏØ| ÁùÅÌË®ÊÐ| ºá·åÏØ| ¹Ì°²ÏØ| À¼Î÷ÏØ| ÁÙâ¢ÏØ| ºÓÇúÏØ| ½­ÃÅÊÐ| Í¨É½ÏØ| ÓàÇìÏØ| Íú²ÔÏØ| ƽÁ¹ÊÐ| ÎÚÀ­ÌØÖÐÆì| ξÊÏÏØ| íìíôÏØ| ½ú³Ç| ÓÜÖÐÏØ| ÒÍÁ¼ÏØ| ÐËÎÄÏØ| ÔÆÏöÏØ| ¿µÀÖÏØ| ÅíÉ½ÏØ| ÃàÖñÊÐ| Ê©µéÏØ| ÃñÏØ| ÉϸßÏØ| ÆÕ¶¨ÏØ| Äϰ²ÊÐ| Ë«ÅÆÏØ| ¸ß¶û·ò| ÑÓ¼ªÊÐ| μÄÏÊÐ| ³¤ÖÎÏØ| ÄÂÀâÊÐ| ÖÎÏØ¡£| ºÓ½òÊÐ| ËçÖÐÏØ| ÆÕ¶ý| ÆÁ¶«ÏØ|