==========================================
==æœåŠ¡ç«¯ä»£ç :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>