2007/05/21 | [再加工]XMLSocket(服务器+客户端)代码,包含解决中文问题
类别(Flash及RIA) | 评论(3) | 阅读(1635) | 发表于 09:59

(Ezzz:本文是根据网上相关文章再加工而成)

XMLSocket(服务器+客户端)代码,包含解决中文问题

//Flash code

System.useCodepage=true;
var mySocket:XMLSocket = new XMLSocket();

//本地地址,端口3000
mySocket.connect("localhost", 3000);
//事件
mySocket.onConnect = function(myStatus) {
 if (myStatus) {
  trace("连接成功!");
  //发送信息
  mySocket.send("发送中文"+"\n");
  trace("发送成功!");
 } else {
  trace("连接失败!");
 }
};
//接受信息事件
mySocket.onData = function(msg:String) {
 trace("接受到的内容:"+msg);
};

//Java code

package test;

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

public class LocalServer {
 protected int listenPort = 3000;

 public void acceptConnections() {
  try {
   ServerSocket server = new ServerSocket(this.listenPort);
   // 在服务器端,我们需要ServerSocket对象以便建立服务,参数是兼听的端口号
   Socket incomingConnection = null;// 创建一个客户端的Socket变量,以接收从客户端监听到的Socket
   // handleConnection处理
   System.out.println("Server端正在等待一个socket连接......");
   incomingConnection = server.accept();// 调用该 ServerSocket 的
   // accept()来告诉它开始侦听
   System.out.println("一个socket客户端已经连接过来......");
   handleConnection(incomingConnection);
  } catch (BindException e) {
   System.out.println("Unable to bind to port " + listenPort);
  } catch (IOException e) {
   System.out.println("Unable to instantiate a ServerSocket on port: "
     + listenPort);
  }
 }

 public void handleConnection(Socket incomingConnection) {
  System.out.println("\r\n正在对此连接进行处理......\n");

  try {
   // 首先获取同Socket相关联的流outputToSocket和InputStream
   // 其中outputToSocket是要返回给客户端Socket的流
   // InputStream是客户端发来的请求
   OutputStream outputToSocket = incomingConnection.getOutputStream();
   InputStream inputFromSocket = incomingConnection.getInputStream();
   BufferedReader streamReader = new BufferedReader(
     new InputStreamReader(inputFromSocket));

   // 发送信息
   BufferedWriter streamWriter = new BufferedWriter(
     new OutputStreamWriter(outputToSocket));
   streamWriter.write("<msg>GOOD BOY</msg>\0");
   streamWriter.flush();
   // outputToSocket.close();

   // 首先要将InputStream转换到BufferedReader中
   String line = null;
   while ((line = streamReader.readLine()) != null) {
    System.out.println("Client message is [ " + line + " ]");
    streamWriter.write("来自服务器 [ " + line + " ] \0");
    streamWriter.flush();
    // 从streamReader中读出信息,直接输出到默认输出设备中(本例中是指dos窗口)
   }
   System.out.println("\r\n\r\n接受信息完毕!");
   // 完成之后关闭所有流,注意关闭Socket流的顺序
   streamReader.close();
  } catch (Exception e) {
   System.out.println("Error handling a client: " + e);
  }
 }

 // 主程序,建立sever实例对象,然后运行对象的acceptConnections()方法
 public static void main(String[] args) {
  LocalServer server = new LocalServer();
  server.acceptConnections();
 }
}

0

评论Comments