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

来源:互联网 发布:千里眼淘宝插件mac 编辑:程序博客网 时间:2024/05/21 07:50

转自http://blog.5d.cn/user33/ezzz/200705/401557.html

(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();
 }
}