flex跟后台socket通信

flex跟后台socket通信的例子,可以指定字符编码。  
<xml version="1.0" encoding="utf-8"> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> 
 <mx:Style source="css/style.css"/> 
 <mx:Script source="script/FlexSocket.as"/> 
 <mx:TextArea id="txtReceive" backgroundColor="#000000" color="#00FF00" editable="false"/> 
 <mx:TextInput id="txtSend" focusOut="getFocus()"/> 
 <mx:Button id="btnSend" label="Send" width="80" height="25" click="send()"/> 
 </mx:Application> 
  
FlexSocket.as:  
import flash.events.Event: 
import flash.events.ProgressEvent: 
import   flash.net.Socket: 
import   flash.utils.ByteArray: 
private var socket:Socket: 
private var timer:Timer: 
public function init():void{ 
 this.focusManager.setFocus(txtSend): 
 try{ 
  socket = new Socket(): 
    socket.addEventListener(Event.CONNECT, onConnect): 
   socket.addEventListener(ProgressEvent.SOCKET_DATA, onReceive): 
   socket.addEventListener(Event.CLOSE,onClose): 
   socket.connect( "localhost", 2900): 
 } 
catch(event:Error){ 
  txtReceive.text += "socket连接失败!": 
 } 
 } 
private function onConnect(event:Event):void { 
 txtReceive.text += "socket 连接成功...../r": 

private function onReceive(event:ProgressEvent):void{ 
 var bytes:ByteArray = new ByteArray(): 
 while (socket.bytesAvailable) { 
  socket.readBytes(bytes,0,socket.bytesAvailable): 
 } 
 var message:String: 
 try { 
  message = bytes.readMultiByte(bytes.length,"utf-8"): 
  //message = bytes.readUTFBytes(bytes.length).replace("/r/n","/r"): 
  txtReceive.text += message: 
  } 
 catch (event:Error){ 
  } 
  txtReceive.verticalScrollPosition = txtReceive.maxVerticalScrollPosition: 

     private function onClose(event:Event):void{ 
 txtReceive.text += "socket 连接断开...../r": 

private function sendMessage(message:String):void{ 
   var socketData:ByteArray = new ByteArray(): 
    socketData.writeUTFBytes(message): 
   socket.writeBytes(socketData): 
   socket.flush(): 

  private function send():void{ 
 var message:String = txtSend.text + "/r" : 
 sendMessage(message): 
 txtSend.text = "": 
 this.focusManager.setFocus(txtSend): 

  
Java版多线程socket服务端代码:  
import java.io.BufferedReader: 
import java.io.IOException: 
import java.io.InputStreamReader: 
import java.io.PrintWriter: 
import java.io.UnsupportedEncodingException: 
import java.net.ServerSocket: 
import java.net.Socket: 
import java.util.concurrent.ExecutorService: 
import java.util.concurrent.Executors: 
public class MultiThreadServer { 
 private int port = 2900: 
 private ServerSocket serverSocket: 
 private ExecutorService executorService: 
// 线程池 private final int POOL_SIZE = 10: 
// 单个CPU线程池大小 public MultiThreadServer() throws IOException { 
  serverSocket = new ServerSocket(port): 
  // Runtime的availableProcessor()方法返回当前系统的CPU数目.  executorService = Executors.newFixedThreadPool(Runtime.getRuntime()    .availableProcessors()    * POOL_SIZE): 
  System.out.println("多线程socket服务器启动,在2900端口监听连接....."): 
 } 
 public void service() { 
  Socket socket = null: 
  while (true) { 
   try { 
    // 接收客户连接,只要客户进行了连接,就会触发accept(): 
从而建立连接    socket = serverSocket.accept(): 
    executorService.execute(new Handler(socket)): 
   } 
 catch (Exception e) { 
    e.printStackTrace(): 
   } 
  } 
 } 
 public static void main(String[] args) throws IOException { 
  new MultiThreadServer().service(): 
 } 

class Handler implements Runnable { 
 private Socket socket: 
 public Handler(Socket socket) { 
  this.socket = socket: 
 } 
 private PrintWriter getWriter(Socket socket) throws IOException { 
  return new PrintWriter(socket.getOutputStream(), true): 
 } 
 private BufferedReader getReader(Socket socket) throws IOException { 
  return new BufferedReader(new InputStreamReader(socket.getInputStream())): 
 } 
 public String echo(String msg) { 
  try { 
   return new String(("echo:" + msg).getBytes(),"utf-8"): 
  } 
 catch (UnsupportedEncodingException e) { 
   e.printStackTrace(): 
  } 
  return "": 
 } 
 public void run() { 
  try { 
   System.out.println("接收到新的连接来自: "     + socket.getInetAddress() + ":" + socket.getPort() + ",准备接收消息......"): 
   BufferedReader br = getReader(socket): 
   PrintWriter pw = getWriter(socket): 
   String msg = null: 
   while ((msg = br.readLine()) != null) { 
    System.out.println("接收到来自 "      + socket.getInetAddress() + ":" + socket.getPort() + " 的消息:/r/n" + msg): 
                                     pw.println(echo(msg) ): 
        System.out.println("发送完毕:" + msg): 
    if (msg.equals("bye"))     break: 
   } 
  } 
 catch (IOException e) { 
   e.printStackTrace(): 
  } 
 finally { 
   try { 
    if (socket != null)     socket.close(): 
   } 
 catch (IOException e) { 
    e.printStackTrace(): 
   } 
  } 
 } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值